垃圾代码书写准则(有意思)

开门见山地说吧,在逛 GitHub 的时候,发现了一个很是有意思的项目,地址以下所示:javascript

github.com/trekhleb/st…java

名叫“垃圾代码书写准则”,瞧这名字,我真的是服了。做者也是良苦用心,从反面教材的角度来阐述正确书写代码格式的重要性。做者使用 JavaScript 编写的代码示例,我把它重制成了 Java 版,而且用我本身的语言风格翻译成了中文,但愿小伙伴们可以喜欢。git

💩 以一种容易形成代码混淆的方式命名变量

命名越短,就须要越多的时间去思考代码逻辑等问题。程序员

Good 👍🏻github

int a = 42;
复制代码

Bad 👎🏻算法

int age = 42;
复制代码

💩 变量/方法命名风格不统一

为风格不统一干杯。数据库

Good 👍🏻设计模式

int wWidth = 640;
int w_height = 480;
复制代码

Bad 👎🏻markdown

int windowWidth = 640;
int windowHeight = 480;
复制代码

💩 不写注释

反正没人能读懂你的代码。网络

Good 👍🏻

int cdr = 700;
复制代码

Bad 👎🏻

注释应该包含一些“为何”,而不是一些“是什么”。若是代码连是“什么”都表达不清楚,那代码也太烂了。

// 700ms 的数量是从 UX A/B 测试结果中获得的一个经验值。
// @查看: <详细解释 700 的一个连接>
int callbackDebounceRate = 700;
复制代码

💩 使用母语写注释

若是你的母语是英语,那么请忽略这条准则。

Good 👍🏻

// Закриваємо модальне віконечко при виникненні помилки.
toggleModal(false);
复制代码

Bad 👎🏻

// 隐藏错误弹窗
toggleModal(false);
复制代码

PS:若是英语书写能力不是很强的话,建议仍是用母语吧。毕竟说清楚总比说不清楚要强。

💩 声明变量的风格不统一

再次为风格不统一干杯。

Good 👍🏻

String [] i1 = {"沉", "默", "王", "二"};
String i2 [] = {"沉", "默", "王", "三"};
复制代码

Bad 👎🏻

String [] wanger = {"沉", "默", "王", "二"};
String wangsan [] = {"沉", "默", "王", "三"};
复制代码

💩 尽量把代码写成一行

Good 👍🏻

IntStream.range(1, 5).boxed().map(i -> { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(System.out::println);
复制代码

Bad 👎🏻

for (int i = 1; i < 5; i++) {
    System.out.println("Happy Birthday " + (i == 3 ? "dear NAME" : "to you"));
}
复制代码

💩 对错误信息无论不顾

不管何时发现错误,都没有必要让其余人知道。

Good 👍🏻

try {
  // 意料以外的状况。
} catch (error) {
  // tss... 🤫
}
复制代码

Bad 👎🏻

try {
  // 意料以外的状况。
} catch (error) {
  // and/or
  logError(error);
}
复制代码

💩 使用大量的全局变量

全球化的原则。

Good 👍🏻

int x = 5;

void multi() {
  x = x * 2;
}

multi(); // 如今 x 是 10
复制代码

Bad 👎🏻

int x = 5;

int multi(int num) {
  return num * 2;
}

x = multi(x); // 如今 x 是 10
复制代码

💩 声明根本不会使用的变量

万一之后用了呢?以备不时之需。

Good 👍🏻

int sum(int a, int b, int c) {
  int timeout = 1300;
  int result = a + b;
  return a + b;
}
复制代码

Bad 👎🏻

int sum(int a, int b) {
  return a + b;
}
复制代码

💩 若是条件容许的话,从不指定类型。

Good 👍🏻

// 享受便捷的快乐
List list = new ArrayList();
list.add("沉默王二");
list.add(18);
复制代码

Bad 👎🏻

List<String> nameList = new ArrayList<String>();

// 编译出错
nameList.add(18);
复制代码

💩 没鸟用的代码

看起来更严谨,其实不少余。

Good 👍🏻

Integer multi(Object num) {
    if (!(num instanceof Integer)) {
        return null;
    } else if (num != null) {
        return (Integer) num * 2;
    }
    return null;
}
复制代码

Bad 👎🏻

Integer multi(Object num) {
    if (num instanceof Integer) {
        return (Integer) num * 2;
    }
    return null;
}
复制代码

💩 大量的 if-else 嵌套

Good 👍🏻

void someMethod(int a, int b, int c) {
    if (a > 0) {
        if (b > 0) {
            if (c > 0) {
               int result = a / b / c;
            }
        }
    }
}
复制代码

Bad 👎🏻

void someMethod1(int a, int b, int c) {
    if (a < 0 || b < 0 || c < 0) {
        return;
    }
    int result = a / b / c;
}
复制代码

💩 良莠不齐地缩进

良莠不齐乃幸福本源。

Good 👍🏻

String [] wanger = {"沉", 
        "默", "王", "二"};
String [] wangsan = {"沉", "默", "王", "三"};
Arrays.asList(wanger).stream().
        forEach(System.out::println);
Arrays.asList(wangsan).
        stream().
                forEach(System.out::println);
复制代码

Bad 👎🏻

String [] wanger = {"沉", "默", "王", "二"};
String [] wangsan = {"沉", "默", "王", "三"};
Arrays.asList(wanger)
        .stream()
        .forEach(System.out::println);
Arrays.asList(wangsan)
        .stream()
        .forEach(System.out::println);
复制代码

💩 代码行数多的方法的比少的好

不要把代码逻辑分红可读的部分。

  • 一个类中的代码行数超过 10000 行。
  • 一个方法中的代码行数超过 1000 行。
  • 一个方法里既作减法处理又作加法处理,还作乘除的处理。

💩 不要测试你的代码

代码测试是测试工程师的事,关我屁事。

💩 避免代码风格统一

为所欲为地编写代码,特别是在一个团队中有多个开发人员的状况下,我崇尚“自由”。

💩 不要写文档

从一开始就不要。

💩 不要删除废弃掉的代码

代码尽管已经废弃了,注释掉就好了,不必删掉。

好了,小伙伴们还有须要补充的吗?

喜欢逛 GitHub 的小伙伴们能够点击下面的地址跳转过去查看,我已经提交了:

github.com/itwanger/st…

另外再推荐一个项目,里面包含了 Java 程序员常读的书单,帮你构建最强知识体系,机不可失时再也不来。但不限于 Java,包括设计模式、计算机网络、操做系统、数据库、数据结构与算法、大数据、架构、管理等等。

github.com/itwanger/Ja…

小伙伴们也能够去 star 下。周四加油,记得点赞,重拾咱们的传统美德!

相关文章
相关标签/搜索