我写出这样干净的代码,老板直夸我

2022-05-05 16:53:32 浏览数 (1)

一份整洁的代码对于一个系统是多么重要。如果代码写的乱七八糟,最后的结果就是无法对这些代码进行有效的管控。很有可能会毁掉这个系统。

什么才是整洁的代码?

Biarne Stroustrup -【C 语言发明者,C Programming Language(中译版《C 程序设计语言》)一书作者】,我喜欢优雅和高效的代码。代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。

有意义的命名

见名知意

命名要名副其实,虽然起个好名字要花时间,但省下来的时间比花掉的时间多。

变量、函数或类的名称需要表达出:它为什么会存在,它做什么事,应该怎么用。如果这个名称还需要注释来补充,那就不算名不副实。

代码语言:javascript复制
int d; //消逝的时间,以日计   ...1

int daysSinceCreation;       //2

如上代码,变量d什么也没有说明。和后面的注释八竿子打不着,第二行的代码就清晰多了。

代码语言:javascript复制
public List <int[]> getThem() {
    List < int[] > list1 = new ArrayList < int[] > ();
    for (int[] x: theList) {
        if (x[0] == 4) {
            list1.add(x);
        }
    }
    return list1;
}

上面的代码你或许有疑问:

  • (1) theList中是什么类型的东西?
  • (2) theList零下标条目的意义是什么?
  • (3)值4的意义是什么?
  • (4)我怎么使用返回的列表?

可能当时人知道意思,但接手开发肯定会一脸懵逼的。

如果对命名有困惑的,可以看看这个网站:https://unbug.github.io/codelf/

输入想要翻译的中文,下面会列举出「Github」上面使用过的相关命名。

避免误导

比如你想定义一组账号,不要用accountList,这样会误认为这是个List类型,除非真的是List类型的。可以使用accountGroup。

再来看下面代码:

代码语言:javascript复制
int a=l;
if(O==D)
a=O1; 
else
l=o1;

上面这串代码整的傻傻分不清O和0l和1。简直亮瞎我的眼。

有意义的区分

代码语言:javascript复制
public static void copyChars(char a1[],char a2[]) {
     ....
}

参数过于混乱,改成

代码语言:javascript复制
public static void copyChars(char source[],char destination[]) {
     ....
}

看着舒服多了。

可搜索的名称

代码语言:javascript复制
for(int j = 0;j < 34;j  ) {
    s  = (t[j] * 4) / 5;
}

如图:魔法值太多。可以给魔法值命名。

代码语言:javascript复制
private static final int WORK_DAYS_PRE_WEEEK = 5 ;
private static final int NUMBER_OF_TASKS = 34 ;
private static final int REAL_USE_DAYS = 4 ;
privat int sum = 0;

for(int j = sum;j < NUMBER_OF_TASKS;j  ) {
    s  = (t[j] * REAL_USE_DAYS) / WORK_DAYS_PRE_WEEEK;
}

向上面这样,至少可以搜索得到。

类名与方法名

类名应该是名词短语。如:Student、Person、Account

方法名应该是动词短语。如:getStudent、listPerson、save

规范的方法

短小精悍

有些开发写的方法内容上千行,这样的方法估计连自己看着都累,为何不将内容作适当抽取呢。

方法要短小。一般一个方法20行就足够了。

阿里巴巴要求一个方法总行数不能超过80行。

只做一件事

就是说每个方法只应该有一个功能,如果你要写的方法功能较多,建议抽取,然后再组合。

代码语言:javascript复制
public void drawLottery() {
   listUser();  //1.查询用户
   drawHandler(); //2.抽奖算法
   resultHandler();//3.抽奖结果处理
}

如上面代码,将多个方法组合起来成一个方法清晰明了。如果把这3个功能全写在drawLottery()。后面的开发来看,估计头都要看秃。

0 人点赞