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

    文章

    4941

    浏览量

    73135
  • GitHub
    +关注

    关注

    3

    文章

    484

    浏览量

    18423

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【启扬方案】基于RK3576的智能垃圾分类站应用解决方案

    伴随着城市化进程的加速和环境问题的日益凸显,人们对于环境保护的关注度也在不断提高,垃圾分类处理成为社会发展的重要议题。为有效解决垃圾分类和管理的难题,智能垃圾分类站应运而生。智能垃圾
    的头像 发表于 12-04 17:29 219次阅读
    【启扬方案】基于RK3576的智能<b class='flag-5'>垃圾</b>分类站应用解决方案

    RFID在垃圾分类中的核心优势

    RFID在垃圾分类中的核心优势精准溯源每个居民或单位的垃圾桶配备唯一编码的RFID标签,系统可记录每次投放的时间、地点和责任人,实现垃圾来源可追溯。自动识别分类在智能垃圾箱上安装RFI
    的头像 发表于 09-23 11:08 372次阅读
    RFID在<b class='flag-5'>垃圾</b>分类中的核心优势

    智慧城市物联网解决方案:垃圾中转站监控运维平台

    垃圾中转站是保障城市生活垃圾集中收纳、暂存与转运的核心基础设施,承担着从垃圾收集进场、压缩处理到转运出库的全流程运行职能,其运行过程中的设备运行稳定性、环境污染物控制与垃圾转运效率,直
    的头像 发表于 09-03 15:20 355次阅读
    智慧城市物联网解决方案:<b class='flag-5'>垃圾</b>中转站监控运维平台

    HarmonyOSAI编程编辑区代码

    理解的情况下进行代码。在编辑器中的内容较少时,AI可能无法有效理解用户的意图并生成相应的代码。 模型反馈需满足规则:光标上文10行内,有效代码行数超过5行(排除单独{}、()、[]
    发表于 08-21 15:43

    硬件工程师的 “鄙视链” 新动向:代码的,凭啥瞧不起画图的?

    “  在海外硬件工程师的世界里,一场关于设计灵魂归属的“圣战”已悄然打响。一边是信奉“所见即所得”、手握鼠标精雕细琢的“画图派”;另一边,则是高举“代码即真理”、用键盘召唤电路的“码派”。这不
    的头像 发表于 08-06 11:21 3210次阅读
    硬件工程师的 “鄙视链” 新动向:<b class='flag-5'>写</b><b class='flag-5'>代码</b>的,凭啥瞧不起画图的?

    RFID标签在垃圾分类的应用

    二、RFID标签在垃圾分类中的优势高效率:RFID可以快速批量读取垃圾信息,大幅缩短操作时间,提高垃圾分类效率。准确性:RFID减少了人工操作的错误率,提高了垃圾分类的准确性和可靠性。
    的头像 发表于 07-31 16:48 629次阅读
    RFID标签在<b class='flag-5'>垃圾</b>分类的应用

    生活垃圾焚烧发电厂数据采集可视化管理系统

    生活垃圾焚烧发电是通过对燃烧热值较高的垃圾进行高温焚烧,使得在高温焚烧中产生的热能转化为高温蒸汽,进而推动汽轮机并带动发电机发电,是一种污染较小、效益较高的污染治理方式。但同时焚烧发电也会带来废水
    的头像 发表于 06-04 17:13 411次阅读

    在STM32H5上使用fatfs函数时用不了DMA的方式,应该怎么使用呢?

    请问在STM32H5上使用fatfs函数时,用不了DMA的方式,应该怎么使用呢,有人遇到过类似的问题嘛
    发表于 03-12 07:10

    DeepSeek接入到VSCode实现提词及代码

    在AI大火之后,AI代码一直是讨论的热题,之前比较火的cursor就是基于此出现的,但是国内访问受限,而且价格昂贵,我们今天就做个平替版。
    的头像 发表于 03-01 15:50 1540次阅读
    DeepSeek接入到VSCode实现提词及<b class='flag-5'>代码</b>助<b class='flag-5'>写</b>

    嵌入式工业级显示器在环保垃圾柜设备中发挥着至关重要的作用

    嵌入式工业级显示器在环保垃圾柜设备中发挥着至关重要的作用。以下是其具体作用的分析: 一、提供交互界面 嵌入式工业级显示器为环保垃圾柜设备提供了一个直观、易用的交互界面。用户可以通过触摸屏幕进行操作
    的头像 发表于 02-21 11:36 570次阅读
    嵌入式工业级显示器在环保<b class='flag-5'>垃圾</b>柜设备中发挥着至关重要的作用

    嵌入式工业级显示器在环保垃圾柜设备中的作用

    嵌入式工业级显示器在环保垃圾柜设备中发挥着至关重要的作用。以下是其具体作用的分析: 一、提供交互界面 嵌入式工业级显示器为环保垃圾柜设备提供了一个直观、易用的交互界面。用户可以通过触摸屏幕进行操作
    的头像 发表于 02-21 11:18 544次阅读
    嵌入式工业级显示器在环保<b class='flag-5'>垃圾</b>柜设备中的作用

    什么样的代码会被编译器优化

    现在的编译器有多智能,可能你辛辛苦苦代码,在编译器看来就是几句废话,直接被删除掉。
    的头像 发表于 01-16 16:38 929次阅读

    智能垃圾投放站远程监控智慧运维系统方案

    随着环保意识的提高和政策的推动,垃圾分类已成为全球发展的重要主题。我国持续推进垃圾分类和回收等相关产业的发展,鼓励居民和企业进行垃圾分类和回收,以减少资源浪费和环境污染。 智能垃圾投放
    的头像 发表于 12-31 15:47 608次阅读

    垃圾桶满溢检测器中溢满程度监测方案

    这两年来,随着物联网、人工智能、云计算、大数据等技术在智慧环卫领域的逐步下沉渗透,使得城市环卫的数字化作业模式也愈加成熟。广为熟知的便是垃圾分类管理。垃圾分类管理采用垃圾桶对垃圾进行分
    的头像 发表于 12-20 16:15 1381次阅读
    <b class='flag-5'>垃圾</b>桶满溢检测器中溢满程度监测方案

    垃圾短信?手机自动识别垃圾短信逻辑的分析

    作者:京东科技 贾玉龙 1 背景 随着智能手机的普及和移动互联网的发展,短信作为一种传统的通讯方式,仍然保持着其独特的地位。然而,随着垃圾短信的泛滥,手机自动识别垃圾短信的技术也在不断进步。对于提供
    的头像 发表于 12-16 10:19 1468次阅读