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

    文章

    4552

    浏览量

    66642
  • GitHub
    +关注

    关注

    3

    文章

    456

    浏览量

    15907

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    智能垃圾回收箱及其控制系统

    智能高效远程控制智能垃圾桶回收箱本文设计了基于机械传动、嵌入式系统和物联网技术的智能垃圾回收箱及控制系统,包括结构、硬件和软件设计,以及基于机智云后台服务器的操作系统,实现了用户信息识别和与垃圾
    的头像 发表于 04-13 08:10 224次阅读
    智能<b class='flag-5'>垃圾</b>回收箱及其控制系统

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

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

    基于机智云物联网平台的智能垃圾回收箱与控制系统研究

    软件设计流程分析,根据硬件部分的原理设计出软件流程图,编制软件程序代码。 (3)智能垃圾回收箱的设备信息、用户信息,APP 绑定、箱体定位等功能,通过云平台实现。云平台可以对数据进行储存、分析计算
    发表于 04-09 17:25

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

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

    AI垃圾溢出识别摄像机

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

    如何使用Arduino制作智能垃圾

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

    东莞鹏利全自动垃圾桶清洗机——垃圾桶清洗演示

    智能垃圾
    鑫金晖
    发布于 :2023年11月09日 14:04:03

    东莞鹏利智能垃圾桶暂存中转站——垃圾桶进出演示#环卫车 #智能垃圾

    智能垃圾
    鑫金晖
    发布于 :2023年11月09日 14:03:25

    3个IO控制16个按键扫描方式应该怎么代码

    3个IO控制16个按键扫描方式应该怎么代码
    发表于 10-27 06:54

    STM32智能垃圾桶自动识别各类垃圾概述

    离线语音识别识别垃圾种类并且垃圾桶自动翻盖:** 说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应关键词
    的头像 发表于 10-25 09:58 734次阅读
    STM32智能<b class='flag-5'>垃圾</b>桶自动识别各类<b class='flag-5'>垃圾</b>概述

    如何选择垃圾收集器

    1、垃圾收集器种类 事实上Java虚拟机规范对垃圾收集器应该如何实现,并没有任何的规定,所以不同的厂商、不同版本的虚拟机所提供的垃圾收集器都会有所不同,并且一般都会提供参数供用户根据自
    的头像 发表于 10-09 16:48 341次阅读
    如何选择<b class='flag-5'>垃圾</b>收集器

    VR环保教育 | 全民垃圾分类虚拟仿真互动体验,游戏化场景轻松学会垃圾分类

    在我们的日常生活中,垃圾分类已成为一项重要的公民责任。然而,由于缺乏对垃圾分类的深入理解和相关知识,许多人在实践中往往感到困惑和挫败。为了解决这个问题,一种创新的解决方案应运而生:全民垃圾分类虚拟
    的头像 发表于 08-28 15:41 505次阅读
    VR环保教育 | 全民<b class='flag-5'>垃圾</b>分类虚拟仿真互动体验,游戏化场景轻松学会<b class='flag-5'>垃圾</b>分类

    垃圾日志问题如何解决?

    您好,我遇到了垃圾日志问题。每次连接到 AP 时,我都会看到这样的日志: 代码:全选[0;32mI (47971) wifi:state: 0 -> 2 (b0) [0m[0;32mI
    发表于 05-15 08:50

    ESP8266-01在串行监视器中显示垃圾怎么处理?

    波特率(57600 是默认值,AT 工作得很好),但我看到所有波特率变化都是垃圾,并没有停止这样做。它还每秒输出 150 个符号并且不会停止。 垃圾示例: 代码:全选…ÕZªP‚,JHVYº—¡VÕ]­J
    发表于 05-10 12:35