引言
如果说到好代码,我们肯定能说出一堆规则,但对于什么是烂代码,你有比较清晰的认识吗?该项目描述了“最佳垃圾代码”的十九条关键准则,从变量命名到注释编写,这些准则将执导你写出最亮眼的烂代码。
This a list of state-of-the-art shitcode principles your project should follow to call it a proper shitcode.
这是一个你的项目应该遵循的垃圾代码书写准则的列表,把称为适当的垃圾代码。
获取勋章
If your repository follows the state-of-the-art shitcode principles you may use the following “state-of-the-art shitcode” badge:
如果你的仓库遵循垃圾代码书写准则,你应该用下面的”state-of-the-art shitcode” 徽章:
Markdown source-code for the badge:
标记徽章的源代码:
[![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) |
准则
以一种代码已经被混淆的方式命名变量
Fewer keystrokes, more time for you.
如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。
Good 👍🏻
let a = 42; |
Bad 👎🏻
let age = 42; |
变量/函数混合命名风格
Celebrate the difference.
为不同庆祝一下。
Good 👍🏻
let wWidth = 640; |
Bad 👎🏻
let windowWidth = 640; |
不要写注释
No one is going to read your code anyway.
反正没人会读你的代码。
Good 👍🏻
const cdr = 700; |
Bad 👎🏻
More often comments should contain some ‘why’ and not some ‘what’. If the ‘what’ is not clear in the code, the code is probably too messy.
更多时候,评论应该包含一些“为什么”,而不是一些“是什么”。如果“什么”在代码中不清楚,那么代码可能太混乱了。
// The number of 700ms has been calculated empirically based on UX A/B test results. |
使用母语写注释
If you violated the “No comments” principle then at least try to write comments in a language that is different from the language you use to write the code. If your native language is English you may violate this principle.
如果您违反了“无注释”原则,那么至少尝试用一种不同于您用来编写代码的语言来编写注释。如果你的母语是英语,你可能会违反这个原则。
Good 👍🏻
// Закриваємо модальне віконечко при виникненні помилки. |
Bad 👎🏻
// Hide modal window on error. |
尽可能混合不同的格式
Celebrate the difference.
为不同庆祝一下。
Good 👍🏻
let i = ['tomato', 'onion', 'mushrooms']; |
Bad 👎🏻
let ingredients = ['tomato', 'onion', 'mushrooms']; |
尽可能把代码写成一行
Good 👍🏻
document.location.search.replace(/(^\?)/,'').split('&').reduce(function(o,n){n=n.split('=');o[n[0]]=n[1];return o},{}) |
Bad 👎🏻
document.location.search |
不要处理错误
Whenever you catch an error it is not necessary for anyone to know about it. No logs, no error modals, chill.
无论何时发现错误,都没有必要让任何人知道它。没有日志,没有错误弹框。
Good 👍🏻
try { |
Bad 👎🏻
try { |
广泛使用全局变量
Globalization principle.
全球化的原则。
Good 👍🏻
let x = 5; |
Bad 👎🏻
let x = 5; |
创建你不会使用的变量
Just in case.
以防万一。
Good 👍🏻
function sum(a, b, c) { |
Bad 👎🏻
function sum(a, b) { |
如果语言允许,不要指定类型和/或不执行类型检查。
Good 👍🏻
function sum(a, b) { |
Bad 👎🏻
function sum(a: number, b: number): ?number { |
你应该有不能到达的代码
This is your “Plan B”.
这是你的 “Plan B”.
Good 👍🏻
function square(num) { |
Bad 👎🏻
function square(num) { |
三角法则
Be like a bird - nest, nest, nest.
就像鸟巢,鸟巢,鸟巢。
Good 👍🏻
function someFunction() { |
Bad 👎🏻
async function someFunction() { |
混合缩进
Avoid indentations since they make complex code take up more space in the editor. If you’re not feeling like avoiding them then just mess with them.
避免缩进,因为它们会使复杂的代码在编辑器中占用更多的空间。如果你不喜欢回避他们,那就和他们捣乱。
Good 👍🏻
const fruits = ['apple', |
Bad 👎🏻
const fruits = ['apple', 'orange', 'grape', 'pineapple']; |
不要锁住你的依赖项
Update your dependencies on each new installation in uncontrolled way. Why stick to the past, let’s use the cutting edge libraries versions.
以非受控方式更新每个新安装的依赖项。为什么坚持使用过去的版本,让我们使用最先进的库版本。
Good 👍🏻
ls -la |
Bad 👎🏻
ls -la |
永远将你的布尔值设置为 flag
Leave the space for your colleagues to think what the boolean value means.
Good 👍🏻
let flag = true; |
Bad 👎🏻
let isDone = false; |
函数长的比短的好
Don’t divide a program logic into readable pieces. What if your IDE’s search breaks and you will not be able to find the necessary file or function?
- 10000 lines of code in one file is OK.
- 1000 lines of a function body is OK.
- Dealing with many services (3rd party and internal, also, there are some helpers, database hand-written ORM and jQuery slider) in one
service.js
? It’s OK.
不要把程序逻辑分成可读的部分。如果IDE的搜索停止,而您无法找到所需的文件或函数,该怎么办?
- 一个文件中10000行代码是OK的。
- 一个函数体有1000行代码是OK的。
- 在一个’ service.js ‘ 中处理许多服务(第三方库和内部库、一些工具、手写的数据库ORM和jQuery滑块)? 这是OK的。
不要测试你的代码
This is a duplicate and unnecessary amount of work.
这是重复且不需要的工作。
避免代码风格统一
Write code as you want, especially if there is more than one developer in a team. This is a “freedom” principle.
编写您想要的代码,特别是在一个团队中有多个开发人员的情况下。这是“自由”原则。
构建新项目不需要 README 文档
And keep it that way for the time being.
一开始我们就应该保持。
保存不必要的代码
Don’t delete the code your app doesn’t use. At most, comment it.
不要删除不用的代码,最多注释掉。