前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >垃圾代码书写准则(有意思)

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

作者头像
沉默王二
发布2020-11-03 10:30:38
3720
发布2020-11-03 10:30:38
举报
文章被收录于专栏:沉默王二

周日先唠唠嗑。早上起来刷朋友圈,发现小伙伴们都在说 S10 的事,忍不住思绪就飘了起来。我以前只玩单机游戏,因为。。。。。。难度低,看到这个原因小伙伴们是不是要感动地落泪了。

到苏州参加工作后,被宿友们带着玩了几把 DOTA,就彻底爱上了。一开始虐 AI,后来到对战平台上,叫什么名字竟然一时间忘记了。最高积分也就一千多来着吧,太菜了。

但是,不甘心啊。为了提升技战术水平,看了很多职业大神们的视频教学,比如说大酒神的“从零单排”,以及职业比赛的录像解说,最喜欢的战队是 LGD(老干爹),最喜欢的选手 ZSMJ(蛛丝马迹,或者叫左手摸即)。

再后来,DOTA2 出来了,界面和之前的 DOTA1 完全不同,就好像 Windows 7 和 Windows XP 吧。由于大局观、手操能力、天赋(零)等等各方面的原因,完全玩不了。

游戏玩得不 6,有时候也蛮叫人伤心的。

再后来,同学推荐我玩 LOL(英雄联盟),说操作性要求没那么高,我试玩了几把,确实还不错,最喜欢的一个英雄叫“暗夜猎手-薇恩”,射箭的,感觉动作很潇洒,身材也不错。

不过,终究是年纪大了(再次哭泣),本身在玩游戏上就零天赋,玩起来很吃力,经常被虐,虐到心塞,就渐渐地不玩了。

虽然不玩了,但经常关注 DOTA2 和 LOL 方面的消息。说句实在话,国内电竞选手的水平真的很优秀,出类拔萃的很多,但俱乐部经常有一些骚操作,就导致战队在国际赛事上的成绩一直不是很稳定。

作为一名心系电竞的老(菜) DOTAER,期待明年的 S11 吧。

嗑唠完了,给小伙伴们推荐一个非常有意思的 GitHub 项目:

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

名叫“垃圾代码书写准则”,瞧这名字,我真的是服了。作者也是良苦用心,从反面教材的角度来阐述正确书写代码格式的重要性。

作者使用 JavaScript 编写的代码示例,我把它重制成了 Java 版,并且用我自己的语言风格翻译成了中文,希望小伙伴们能够喜欢。

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

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

Good ??

代码语言:javascript
复制
int a = 42;

Bad ??

代码语言:javascript
复制
int age = 42;

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

为风格不统一干杯。

Good ??

代码语言:javascript
复制
int wWidth = 640;
int w_height = 480;

Bad ??

代码语言:javascript
复制
int windowWidth = 640;
int windowHeight = 480;

? 不写注释

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

Good ??

代码语言:javascript
复制
int cdr = 700;

Bad ??

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

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

? 使用母语写注释

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

Good ??

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

Bad ??

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

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

? 声明变量的风格不统一

再次为风格不统一干杯。

Good ??

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

Bad ??

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

? 尽可能把代码写成一行

Good ??

代码语言:javascript
复制
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 ??

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

? 对错误信息不管不顾

无论什么时候发现错误,都没有必要让其他人知道。

Good ??

代码语言:javascript
复制
try {
  // 意料之外的情况。
} catch (error) {
  // tss... ?
}

Bad ??

代码语言:javascript
复制
try {
  // 意料之外的情况。
} catch (error) {
  // and/or
  logError(error);
}

? 使用大量的全局变量

全球化的原则。

Good ??

代码语言:javascript
复制
int x = 5;

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

multi(); // 现在 x 是 10

Bad ??

代码语言:javascript
复制
int x = 5;

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

x = multi(x); // 现在 x 是 10

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

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

Good ??

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

Bad ??

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

? 如果条件允许的话,从不指定类型。

Good ??

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

Bad ??

代码语言:javascript
复制
List<String> nameList = new ArrayList<String>();

// 编译出错
nameList.add(18);

? 没鸟用的代码

看起来更严谨,其实很多余。

Good ??

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

Bad ??

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

? 大量的 if-else 嵌套

Good ??

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

Bad ??

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

? 参差不齐地缩进

参差不齐乃幸福本源。

Good ??

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

Bad ??

代码语言:javascript
复制
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 下。周末愉快,记得点赞,重拾我们的传统美德!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沉默王二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ? 以一种容易造成代码混淆的方式命名变量
  • ? 变量/方法命名风格不统一
  • ? 不写注释
  • ? 使用母语写注释
  • ? 声明变量的风格不统一
  • ? 尽可能把代码写成一行
  • ? 对错误信息不管不顾
  • ? 使用大量的全局变量
  • ? 声明根本不会使用的变量
  • ? 如果条件允许的话,从不指定类型。
  • ? 没鸟用的代码
  • ? 大量的 if-else 嵌套
  • ? 参差不齐地缩进
  • ? 代码行数多的方法的比少的好
  • ? 不要测试你的代码
  • ? 避免代码风格统一
  • ? 不要写文档
  • ? 不要删除废弃掉的代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档