写点什么

编写代码最应该做好的事情是什么?

作者:李子捌
  • 2021 年 12 月 23 日
  • 本文字数:1631 字

    阅读完需:约 5 分钟

编写代码最应该做好的事情是什么?

1、简介

著名的图灵奖得主:尼古拉斯·沃斯,提出一个著名的等式:程序 = 算法 +数据结构。因此我们程序员应该花精力做好学好算法和数据结构,但是这并不是我们编写代码时最应该做好的事情;因为在 99.99%的场景下,不需要我们来设计算法和实现数据结构(即便是一般的算法工程师也是如此)。


所以在实际开发中,我们编写代码最应该做好的事情是什么呢?**小捌认为是良好的命名规范和详细的代码注释,**这两个看似简单的问题,但是想要做好真的太难太难了,以至于很多年老开发写的代码都会出现命名不规范,代码注释不全甚至没有注释的情况;因此这篇文章我们先来盘一盘 Java 程序员应该如何做好程序命名。​

2、正文

2.1 目标

将 Java 程序的命名规范做好,需要达到的目标总结起来就只有四个字——望文生义。达到这个目标的命名能够让程序具有**“自解释”**的功能,仅仅从名字上就能理解某个包、类、方法、变量的含义,这样也可以缩减后续注释的工作量。这样的代码传阅给其他程序员时,也便于阅读和维护。​

2.2 包

关于包名的命名有两个大致方向:


  1. 标准类库

  2. 用户类库


标准类库在 Java 体系中,标准类库的命名涉及到 java、javax 等命名,这些命名是由定规范的人定的,因此人家想怎么玩就怎么玩,在核心类库 rt.jar 包下可以查看。



用户类库用户类库代码建议使用公司的 Internet 域名开头,顶级域名在前面,比如 com.google、edu.xxx、org.xxx 等等。这并不强制要求,但是如果你编写的代码要在公司外部使用(比如开源),这是一个很好打广告、展现公司的机会。




除了包的前缀之外的其余部分,需要满足尽可能使用单个单词,比如 time、security、math;也可以使用缩写,比如 awt、io、sql。​


不建议包名超过 8 个字母、不建议使用复数。​


2.3 类

类由很多种,比如接口、抽象类、枚举类、普通类等等,这些类在命名上有相同点,也有不同点。​


相同点:


  • 类名统一使用驼峰命名法则(大驼峰),比如 HttpClient、HttpResponse、HttpRequest

  • 类名具有复数形式可以使用复数命名

  • 禁止使用拼音,即便是国际通用的拼音命名,比如 alibaba、youku 也不建议出现在类名命名中


不同点:


  • 接口命名一定要要言简意赅,这样的命名其实现类可以很好的包含接口的命名,比如 Map、Set、List

  • 枚举类必须使用 Enum 结尾

  • 抽象类必须使用 Abstract 开头,比如 AbstractMap、AbstractSet;也可以使用 Base,比如 BaseCalendar、BaseRowSet,建议使用 Abstract。

2.4 变量

变量的命名遵守小驼峰命名,在名称中要体现具体的业务,描述变量的用途。千万不要学源码搞那些单个字母的命名,比如这种:



此外要注意变量名尽量不要使用 is 开头,比如 isRemoved、isDeleted,因为这种命名往往在序列化场景中,被框架方向解析时错误的认为是 removed 和 deleted,相信这种坑大家都踩过。最好的办法就是完全不用。​

2.5 常量

常量就是在作用域内保持不变的值,常量一般用 final 关键字修饰。常量有很多种分别是全局常量、包内常量、类内常量、局部常量等等。​


全局常量:(包内常量、类内常量都一样)全局常量值得是访问修饰符为 public,通常用 public static final 修饰,这种常量威力巨大,任何地方都可以访问,因此我们一定要把命名做好。​


全局常量命名必须全部使用大写字母,如果是多个单词用下划线隔开,拿 Java 的 BigDecimal 来举例.单个单词的常量:


 public static final BigDecimal ZERO = zeroThroughTen[0];
复制代码


多个单词的常量:


public final static int ROUND_HALF_UP =      4;
复制代码


局部常量:局部常量分为方法常量和参数常量,这两种无需使用大写字母,使用小写即可。​


参数常量:


public void hello(final String name) {    // 编译错误    // name = "李子捌";    System.out.println(name);}
复制代码


方法常量:


public void hello() {    final String name = "李子捌";    // 编译错误    // name = "Liziba";    System.out.println(name);}
复制代码

3、彩蛋

最后给大家推荐一个在线命名神器。大家快去试试吧,随便输入一个单词,便会给你搜索很多由该单词组成的词。https://unbug.github.io/codelf/#client

CODELF


发布于: 2021 年 12 月 23 日
用户头像

李子捌

关注

华为云享专家 2020.07.20 加入

公众号【李子捌】

评论

发布
暂无评论
编写代码最应该做好的事情是什么?