写出一手烂代码的十九条准则

写出一手烂代码的19条准则 要是想写个烂代码,我们只需遵守这十九条准则? 第一条:打字越少越好 如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。如下所示,「Good」表示遵循该规则的示例,Bad 表示没遵循该规则的示例。 第二条:变量/函数混合命名风格 我们需要混合命名方法与变量,这样才能体现命名的多样性。 第三条:不要写注释 反正代码都看得懂,为什么要写注释?或者说,反正没人看我的代码,为什么要写注释? ... 阅读详情

本文“实践”部分由作者编写,其余由Github网站的用户trekhleb编写。

原文地址:

https://github.com/trekhleb/state-of-heartshitcode/blob/master/README.zh-CN.md

这是一个你的项目应该遵循的垃圾代码书写准则的列表,把称为适当的垃圾代码。

实践:被别人夸”代码真的写的好漂亮“不能不说是一种荣誉。但是可能有人天生只会夸下面的代码:

01010101010101001010100101010010101010100101000010100010101011101010111
101010010101001010101111101010000001010

……

先不说这个。我们先来看一看什么叫做”烂代码“

获取徽章

如果你的仓库遵循垃圾代码书写准则,你应该用下面的"state-of-the-art shitcode" 徽章:

标记徽章的源代码:

[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode)

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

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

Good ????????

let a = 42;

Bad ????????

let age = 42;

实践:作者对于此条准则有极大的认同。如果你是写十几行的短代码,那么你完全可以使用像a、d、w这样的变量或函数。但如果你是写几百行的长代码,如果你还用这样的名称,不但不好看,而且到后期你会完全不知道这是表达的什么意思。所以,与其用a、b、c不如用file_name、path、exception caught这样的名称。

???? 变量/函数混合命名风格

为不同庆祝一下。

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);

实践:同上。如果你在一个团队里,且他们也都遵循了这条守则,你们写的代码可能是这样的:

int Calculation(int num1,int num2){
  // حساب مجموع رقمين
  return num1+num2;
}
int multiplication(int num1,int num2){
  // 二つの数の積を計算します。
  return num1*num2;
}
int division(int num1,int num2){
  // 计算两个数商
  return num1/num2;
}
int main(){
  // กอง
  dicision(123,23);
}

所以,知道用英语写注释的重要性了吗

???? 尽可能混合不同的格式

为不同庆祝一下。

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;
}

实践:如果你写的代码不需要太大的内存空间,你完全可以这么做。但是,如果你写的代码完全足够几个G的话……

MemoryError再这里等着你……

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

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]);
  });
})

实践:MemoryError等着你……

???? 不要锁住你的依赖项

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

Good ????????

$ ls -la

package.json

Bad ????????

$ ls -la

package.json
package-lock.json

实践:很多第三方库的更新频率远远超出你的想象……

例如,Django的1.11版本和3.03版可以说是天翻地覆的变化。如果你愿意,你可以试试……

???? 函数长的比短的好

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

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

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

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

实践:作者曾经有过网络爬虫的经历。爬下来的数据如果你存在一个文档里然后试图去读取它的时候大概是这样的:

Traceback(most recent call last):

    file G:/python_test/pachong.py,line 302 in <module>

    lines = file.readlines()

        ^

MemoryError

???? 不要测试你的代码

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

实践:如果你不测试直接上阵的话……

Traceback(most recent call last):

    file G:/python_test/file.py,line 16 in <module>

    file G:/python_test/text.py,line 30in <module>

   fileC:/Users/Rain/AppData/Local/Programme/Python/Libs\BeautifalSoup3,line 6132 in <module>

    file G:/python_test/beautifalsoups.py,line 3 in <module>

from BeautifalSoup3 import bautifal_soup

                                       ^

ImportError:No such package 'bautifal_soup'

后来忙活了两天,才发现是拼写错了,少了个s

……………………………………………………………………

???? 避免代码风格统一

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

???? 构建新项目不需要 README 文档

一开始我们就应该保持。

???? 保存不必要的代码

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

实践:这些代码在执行是会很占内存。MemoryError又找到了一个好去处

知道如何写出烂代码了吗?再会。

幸狐RV1106开发板运行Yolo8示例 rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。 阅读详情

相关推荐

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 481

手把手教你写出令人窒息的烂代码

手把手教你写出令人窒息的烂代码

谢谢你的关注 520

deepfacelab下载安装及训练(小白篇),以及导出SAEHD为dfm文件,解决broken pipe问题

其中如果用的是RTX30系列显卡的话,需要把WIN10升级到20H4或更新版本,然后打开硬件加速,不然会出现训练时一直卡在第一个迭代不动了,我的服务器版本为22H2,符合。支持WIN10,win11,WIN7,LINUX,不支持mac(因为mac不支持NVIDIA显卡)

caoyongsheng的博客 3901

软件基本功:垃圾代码的共同特征

不对齐。 代码起名问题。 代码共用

柳鲲鹏 1004

Creo报许可证错误License request failed for feature的解决方案

有些朋友用了一段时间打开creo软件,出现icense request failed for feature”错误,这个是Creo许可证出现了问题,一般是许可证文件无效或是已过期,导致Creo软件通信出现故障,就会出现Creo License request failed for feature, Requsesting CreoPMA_SSQ ,Run ptcstatus.bat server status。第三步:键盘按win+R,在运行窗口里输入:cmd,然后点确定。第八步:点击系统,找到系统信息。

Q82556499的博客 3万+

别再死记硬背了!用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率

本文深度解析如何使用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率(GTFP)。通过详细的模型选择对比、数据准备策略和MaxDEA操作流程,帮助研究者科学构建指标体系并准确解读结果,提升环境管理研究的实证分析能力。

weixin_28731231的博客 314

19条准则 | 手把手教你写出一手烂代码

本文转自"机器之心"(almosthuman2014)「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思...

机器学习算法与Python学习 703

Chromatix 7实战:从零开始调优ISP模块的完整流程(附常见报错解决方案)

本文提供了高通平台Camera调试工具Chromatix 7的完整实战指南。详细阐述了从环境准备、项目初始化、基础校正(如LSC、BPC)到核心ISP管线(Demosaic、CCM、HDR)及后处理(CAC、ANR)的调优全流程,并附带了常见报错(如“未初始化实例”)的解决方案,旨在帮助工程师建立系统性的调试方法论。

weixin_29290863的博客 623

关于烂代码的那些事(中)

作者: 秦迪  发布时间: 2015-08-13 22:36  阅读: 10350 次  推荐: 32   原文链接   [收藏]     1. 摘要   这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣。   在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao)了各自代码中这样或者那样

nicehuai 895

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3026

DeFi核心协议代码解析

本文解析了DeFi两大核心协议Uniswap V2和Compound的智能合约架构与关键代码。Uniswap V2采用恒定乘积公式(x*y=k)实现自动做市,核心合约包括Factory、Pair和Router,具备流动性铸造、代币兑换和TWAP预言机功能。Compound借贷协议通过cToken合约管理存款和借款,采用动态利率模型和抵押率机制,包含资金利用率计算、清算触发等核心算法。两协议均采用模块化设计,通过智能合约实现去中心化金融服务的核心逻辑。

闲人编程的博客 935

教你写出一手烂代码的19条准则

程序员的成长之路互联网/程序员/成长/职场关注阅读本文大概需要 4 分钟。来自:机器之心要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及开发者最好的赞扬。...

良月柒 845

[deprecated]第四章:TTM分析: 4.2.1 存储分配ttm_bo_validate功能实现分析

ttm_bo_validate是TTM框架中负责验证和调整BufferObject物理内存分配的核心函数,主要用于显存管理。该函数通过placement参数判断BO是否需要迁移或重新分配资源,完成内存分配、迁移及缓存策略调整等操作。实现流程包括资源释放、兼容性检查、迁移保护、新资源分配、迁移实现等步骤,支持多跳迁移和临时缓冲区。典型应用于显存溢出迁移、缓存策略调整、驱动初始化等场景,确保BO始终处于预期状态。

图形/计算GPU的驱动与虚拟化技术分享园地 846

写出一手烂代码的 19 条准则!

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,参与:思 要是想写个烂代码,我们只需遵守这十九条准则? 「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编写逻辑都非常优秀。 我们曾经将写代码比喻成写文章:不仅需要有一个主旨,告诉别人代码的作用是什么,同时还应该在精炼与易读之间做权衡。代码过于精炼,整体逻辑难以跟随,代码过于易读,整体就显得比较臃肿。 在精简与易读之间做.

Java技术栈,分享最主流的Java技术 723

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

写出一手Python烂代码的 19 条准则

转载自机器之心要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结...

cainiao_python的博客 363

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

写出一手烂代码的 19 条准则

转载自机器之心“ 阅读本文大概需要 5 分钟。 ”要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己...

静觅 325

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何才能写出一手逼疯同事的烂代码?

要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编...

Java知音 498

代码注释 英文_写出一手烂代码的19条准则

要是想写个烂代码,我们只需遵守这十九条准则?机器之心报道,参与:思。「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编写逻辑都非常优秀。我们曾经将写代码比喻成写文章:不仅需要有一个主旨,告诉别人代码的作用是什么,同时还应该在精炼与易读之间做权衡。代码过于精炼,整体逻辑难以跟随,代码过于易读,整体就显得比较...

weixin_39710991的博客 195

写一手烂代码的 19 条准则,你中枪了吗?

关注逆锋起笔学习资源、工具不用愁☞ 程序员进阶必备资源免费送「各种技术!」 ☜转自:机器之心整理:起笔要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及...

code小生 175

代码逻辑是分方法写好 还是在一个方法写好_写出一手烂代码的19条准则

要是想写个烂代码,我们只需遵守这十九条准则?「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编写逻辑都非常优秀。我们曾经将写代码比喻成写文章:不仅需要有一个主旨,告诉别人代码的作用是什么,同时还应该在精炼与易读之间做权衡。代码过于精炼,整体逻辑难以跟随,代码过于易读,整体就显得比较臃肿。在精简与易读之间做...

weixin_39853155的博客 150
上一篇: 如何建立一个自己的网站
下一篇: 人生苦短,我为啥要用python
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值