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

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

https://github.com/trekhleb/state-of-the-art-shitcode

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

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

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

Good 👍🏻

int a = 42;

Bad 👎🏻

int age = 42;

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

为风格不统一干杯。

Good 👍🏻

int wWidth = 640;
int w_height = 480;

Bad 👎🏻

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 的小伙伴们可以点击下面的地址跳转过去查看,我已经提交了:

https://github.com/itwanger/state-of-the-art-shitcode/blob/master/README.zh-CN.md

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

https://github.com/itwanger/JavaBooks

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336

推荐阅读更多精彩内容

  • 要是想写个烂代码,我们只需遵守这十九条准则? 「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说...
    编程的程序员阅读 151评论 0 0
  • 级别: ★★☆☆☆标签:「HTML代码注入」「WKScriptMessageHandler」「iOS与JS交互」...
    QiShare阅读 1,151评论 0 18
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,454评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,534评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,706评论 1 1