0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

垃圾代码应该怎么写

strongerHuang 来源: strongerHuang 作者: strongerHuang 2021-01-18 11:08 次阅读

在 GitHub 上有一个新项目,它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写。这些准则将指导你写出最亮眼的烂代码。

为了保持与原 GitHub 项目一致的风格,下文没有进行转换。读者们可以以相反的角度来理解所有观点,这样就能完美避免写出垃圾代码。

当然,以下十九条垃圾代码书写准则并没有面面俱到,如果读者们发现有一些难以忍受的烂代码习惯,也可以留言发表你的看法。

这是一个你的项目应该遵循的垃圾代码书写准则的列表:

以一种代码已经被混淆的方式命名变量

如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。

变量/函数混合命名风格

为不同庆祝一下。

Good

let wWidth = 640;
let w_height = 480;

Bad

let windowWidth = 640;
let windowHeight = 480;

不要写注释

反正没人会读你的代码。

Good

const cdr = 700;

Bad

更多时候,评论应该包含一些“为什么”,而不是一些“是什么”。如果“什么”在代码中不清楚,那么代码可能太混乱了。

// 700ms的数量是根据UX A/B测试结果进行经验计算的。
// @查看: <详细解释700的一个链接>
const callbackDebounceRate = 700;

使用母语写注释

如果您违反了“无注释”原则,那么至少尝试用一种不同于您用来编写代码的语言来编写注释。如果你的母语是英语,你可能会违反这个原则。

Good

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

Bad

// 隐藏错误弹窗
toggleModal(false);

尽可能混合不同的格式

为不同庆祝一下。

Good

let i = ['tomato', 'onion', 'mushrooms'];
let d = [ "ketchup", "mayonnaise" ];

Bad

let ingredients = ['tomato', 'onion', 'mushrooms'];
let dressings = ['ketchup', 'mayonnaise'];

尽可能把代码写成一行

Good

document.location.search.replace(/(^?)/,'').split('&').reduce(function(o,n){n=n.split('=');o[n[0]]=n[1];return o},{})

Bad

document.location.search
  .replace(/(^?)/, '')
  .split('&')
  .reduce((searchParams, keyValuePair) => {
    keyValuePair = keyValuePair.split('=');
    searchParams[keyValuePair[0]] = keyValuePair[1];
    return searchParams;
  },
  {}
)

不要处理错误

无论何时发现错误,都没有必要让任何人知道它。没有日志,没有错误弹框。

Good

try {
  // 意料之外的情况。
} catch (error) {
  // tss... 
}

Bad

try {
  // 意料之外的情况。
} catch (error) {
  setErrorMessage(error.message);
  // and/or
  logError(error);
}

广泛使用全局变量

全球化的原则。

Good

let x = 5;

function square() {
  x = x ** 2;
}

square(); // 现在x是25

Bad

let x = 5;

function square(num) {
  return num ** 2;
}

x = square(x); // 现在x是25

创建你不会使用的变量

以防万一。

Good

function sum(a, b, c) {
  const timeout = 1300;
  const result = a + b;
  return a + b;
}

Bad

function sum(a, b) {
  return a + b;
}

如果语言允许,不要指定类型和/或不执行类型检查。

Good

function sum(a, b) {
  return a + b;
}

// 在这里享受没有注释的快乐
const guessWhat = sum([], {}); // -> "[object Object]"
const guessWhatAgain = sum({}, []); // -> 0

Bad

function sum(a: number, b: number): ?number {
  // 当我们在JS中不做置换和/或流类型检查时,覆盖这种情况。
  if (typeof a !== 'number' && typeof b !== 'number') {
    return undefined;
  }
  return a + b;
}

// 这个应该在转换/编译期间失败。
const guessWhat = sum([], {}); // -> undefined

你应该有不能到达的代码

这是你的 “Plan B”.

Good

function square(num) {
  if (typeof num === 'undefined') {
    return undefined;
  }
  else {
    return num ** 2;
  }
  return null; // 这就是我的"Plan B".
}

Bad

function square(num) {
  if (typeof num === 'undefined') {
    return undefined;
  }
  return num ** 2;
}

三角法则

就像鸟巢,鸟巢,鸟巢。

Good

function someFunction() {
  if (condition1) {
    if (condition2) {
      asyncFunction(params, (result) => {
        if (result) {
          for (;;) {
            if (condition3) {
            }
          }
        }
      })
    }
  }
}

Bad

async function someFunction() {
  if (!condition1 || !condition2) {
    return;
  }
  
  const result = await asyncFunction(params);
  if (!result) {
    return;
  }
  
  for (;;) {
    if (condition3) {
    }
  }
}

混合缩进

避免缩进,因为它们会使复杂的代码在编辑器中占用更多的空间。如果你不喜欢回避他们,那就和他们捣乱。

Good

const fruits = ['apple',
  'orange', 'grape', 'pineapple'];
  const toppings = ['syrup', 'cream', 
                    'jam', 
                    'chocolate'];
const desserts = [];
fruits.forEach(fruit => {
toppings.forEach(topping => {
    desserts.push([
fruit,topping]);
    });})

Bad

const fruits = ['apple', 'orange', 'grape', 'pineapple'];
const toppings = ['syrup', 'cream', 'jam', 'chocolate'];
const desserts = [];

fruits.forEach(fruit => {
  toppings.forEach(topping => {
    desserts.push([fruit, topping]); 
  });
})

不要锁住你的依赖项

以非受控方式更新每个新安装的依赖项。为什么坚持使用过去的版本,让我们使用最先进的库版本。

Good

$ ls -la

package.json

Bad

$ ls -la

package.json
package-lock.json

函数长的比短的好

不要把程序逻辑分成可读的部分。如果IDE的搜索停止,而您无法找到所需的文件或函数,该怎么办?

一个文件中10000行代码是OK的。

一个函数体有1000行代码是OK的。

在一个‘ service.js ’ 中处理许多服务(第三方库和内部库、一些工具、手写的数据库ORM和jQuery滑块)? 这是OK的。

不要测试你的代码

这是重复且不需要的工作。

避免代码风格统一

编写您想要的代码,特别是在一个团队中有多个开发人员的情况下。这是“自由”原则。

构建新项目不需要 README 文档

一开始我们就应该保持。

保存不必要的代码

不要删除不用的代码,最多注释掉。

责任编辑:xj

原文标题:GitHub这份垃圾代码书写准则,火了

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4731

    浏览量

    68273
  • GitHub
    +关注

    关注

    3

    文章

    466

    浏览量

    16366

原文标题:GitHub这份垃圾代码书写准则,火了

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FlexLua低代码零基础开发智能垃圾桶产品原型(接入机智云)

    目标功能介绍基于功能强大的ShineBlink低代码物联网核心模组和灵活轻巧的Lua脚本编程语言实现如下功能。1、监测和报警监测圾桶内的烟雾并声光报警监测圾桶内的酒精等有害气体并声光报警监测垃圾桶内
    的头像 发表于 07-11 08:11 1351次阅读
    FlexLua低<b class='flag-5'>代码</b>零基础开发智能<b class='flag-5'>垃圾</b>桶产品原型(接入机智云)

    基于PYNQ的智能垃圾分类系统

    第一部分 设计概述 /Design Introduction 1.1 设计目的 随着现代社会的高速发展,其带来的环境压力也越来越大,对于日益剧增的垃圾产量已经成为世界关注的焦点。垃圾分类成为
    发表于 07-09 18:44

    UART传输在控制台中显示垃圾值是哪里的问题?

    的控制台窗口上显示的不是"Hello World" ,而是垃圾字符。 我检查了流程,发现与示例代码相似,如波特率设置正确,缓冲区流程也正确。 错误还可能出现在哪里?
    发表于 07-02 08:24

    基于Vision Board上的openMV垃圾分类

    通过在Vision Board部署openMV实现垃圾分类。
    的头像 发表于 06-17 10:49 566次阅读
    基于Vision Board上的openMV<b class='flag-5'>垃圾</b>分类

    智能垃圾回收箱功能实验

    需要系统地介绍智能垃圾回收箱软件硬件设计完成后的设备运行状况,包括正常工作和问题调试。同时,也要描述当所有设备正常工作时智能垃圾回收箱的操作流程。01硬件模块的试验在智能垃圾回收箱的正常运转
    的头像 发表于 05-24 08:10 397次阅读
    智能<b class='flag-5'>垃圾</b>回收箱功能实验

    垃圾清运以及垃圾处理“神器”让垃圾清运更高效。

    随着城市功能的不断丰富,城市管理工作也从粗放到精细、从纯人工管理到数字化应用逐渐转变。近日,某小区垃圾满溢监测“神器”上线,能够实时监控区内果皮箱的数量、位置、垃圾量情况,让垃圾清运更高
    的头像 发表于 05-13 09:37 303次阅读
    <b class='flag-5'>垃圾</b>清运以及<b class='flag-5'>垃圾</b>处理“神器”让<b class='flag-5'>垃圾</b>清运更高效。

    如何提升代码质量与效率的秘诀

    提高编程能力其实没有捷径,最佳方式就是多代码。 不过,除了大量代码,提升编程能力还需要大量阅读别人
    的头像 发表于 04-28 14:53 348次阅读
    如何提升<b class='flag-5'>代码</b>质量与效率的秘诀

    垃圾中转站无人值守物联网解决方案

    随着城市化程度越来越高,城乡生活垃圾日益增多,生活垃圾中转站运行和管理问题越来越突出,人力成本高、设备故障运维滞后、运营效率差等问题,成为垃圾中转站管理中绕不开的难题。 垃圾中转站通常
    的头像 发表于 04-19 11:22 656次阅读
    <b class='flag-5'>垃圾</b>中转站无人值守物联网解决方案

    智能垃圾回收箱控制系统硬件设计

    智能高效远程控制智能垃圾桶回收箱控制系统硬件部分的选型与设计是整个产品的基础,所有功能的实现都要围绕其进行开发。本章对智能垃圾回收箱控制系统的硬件进行详细设计。智能垃圾回收箱运行时,通过扫描模块进行
    的头像 发表于 04-13 08:10 764次阅读
    智能<b class='flag-5'>垃圾</b>回收箱控制系统硬件设计

    OpenHarmony南向开发案例:【智能垃圾桶】

    智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量,提醒主人及时处理垃圾;通过日程管家可以实现和其他智能设备联动。
    的头像 发表于 04-11 16:01 486次阅读
    OpenHarmony南向开发案例:【智能<b class='flag-5'>垃圾</b>桶】

    阿里云内部全面推行AI代码

    阿里云正在内部全面推行 AI 编程,使用通义灵码辅助程序员代码、读代码、查 BUG、优化代码等。
    的头像 发表于 04-07 09:22 519次阅读

    瑞萨推出智能垃圾箱解决方案

    随着城市化进程的加速推进,城市垃圾处理问题愈发凸显。传统的垃圾收集方式不仅效率低下,成本高昂,而且往往伴随着严重的环境污染问题。在这一背景下,瑞萨推出的智能垃圾箱解决方案以其环保、高效的特性,为城市
    的头像 发表于 03-16 10:02 913次阅读

    AI垃圾溢出识别摄像机

    随着城市化进程的加快,垃圾处理成为城市管理中的一项重要工作。然而,垃圾桶溢出现象经常发生,给城市环境卫生和市民生活带来不便。为了解决这一问题,AI垃圾溢出识别摄像机应运而生,利用人工智能技术,实现
    的头像 发表于 03-13 11:04 435次阅读
    AI<b class='flag-5'>垃圾</b>溢出识别摄像机

    如何使用Arduino制作智能垃圾

    在这个项目中,我将向您展示如何使用Arduino制作智能垃圾箱,当您带着垃圾接近时,垃圾箱的盖子会自动打开。
    的头像 发表于 02-11 12:22 2812次阅读
    如何使用Arduino制作智能<b class='flag-5'>垃圾</b>箱

    代码即注释,注释即代码的概念是如何形成的

    "代码即注释,注释即代码"这个概念是如何形成的呢?记得之前看一些讨论,程序员应该如何代码的注释,大家的意见很多,不过我只对两句话记忆非常深
    的头像 发表于 11-18 16:52 720次阅读
    <b class='flag-5'>代码</b>即注释,注释即<b class='flag-5'>代码</b>的概念是如何形成的