在 GitHub 上有一个新项目,它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写。这些准则将指导你写出最亮眼的烂代码。
为了保持与原 GitHub 项目一致的风格,下文没有进行转换。读者们可以以相反的角度来理解所有观点,这样就能完美避免写出垃圾代码。
当然,以下十九条垃圾代码书写准则并没有面面俱到,如果读者们发现有一些难以忍受的烂代码习惯,也可以留言发表你的看法。
这是一个你的项目应该遵循的垃圾代码书写准则的列表:
以一种代码已经被混淆的方式命名变量
如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。
变量/函数混合命名风格
为不同庆祝一下。
Good
letwWidth=640;letw_height=480;
Bad
letwindowWidth=640;letwindowHeight=480;
不要写注释
反正没人会读你的代码。
Good
constcdr=700;
Bad
更多时候,评论应该包含一些“为什么”,而不是一些“是什么”。如果“什么”在代码中不清楚,那么代码可能太混乱了。
// 700ms的数量是根据UX A/B测试结果进行经验计算的。// @查看: <详细解释700的一个链接>详细解释700的一个链接>constcallbackDebounceRate=700;
使用母语写注释
如果您违反了“无注释”原则,那么至少尝试用一种不同于您用来编写代码的语言来编写注释。如果你的母语是英语,你可能会违反这个原则。
Good
// Закриваємо модальне віконечко при виникненні помилки.toggleModal(false);
Bad
// 隐藏错误弹窗toggleModal(false);
尽可能混合不同的格式
为不同庆祝一下。
Good
leti=['tomato','onion','mushrooms'];letd=["ketchup","mayonnaise"];
Bad
letingredients=['tomato','onion','mushrooms'];letdressings=['ketchup','mayonnaise'];
尽可能把代码写成一行
Good
document.location.search.replace(/(^?)/,'').split('&').reduce(function(o,n){n=n.split('=');o[n[0]]=n[1];returno},{})
Bad
document.location.search.replace(/(^?)/,'') .split('&') .reduce((searchParams, keyValuePair)=>{ keyValuePair=keyValuePair.split('='); searchParams[keyValuePair[0]]=keyValuePair[1];returnsearchParams; }, {} )
不要处理错误
无论何时发现错误,都没有必要让任何人知道它。没有日志,没有错误弹框。
Good
try{// 意料之外的情况。}catch(error) {//tss...}
Bad
try{// 意料之外的情况。}catch(error) {setErrorMessage(error.message);// and/orlogError(error); }
广泛使用全局变量
全球化的原则。
Good
letx=5;functionsquare() { x=x **2; }square();// 现在x是25
Bad
letx=5;functionsquare(num) {returnnum **2; } x=square(x);// 现在x是25
创建你不会使用的变量
以防万一。
Good
functionsum(a, b, c) {consttimeout=1300;constresult=a+b;returna+b; }
Bad
functionsum(a, b) {returna+b; }
如果语言允许,不要指定类型和/或不执行类型检查。
Good
functionsum(a, b) {returna+b; }// 在这里享受没有注释的快乐constguessWhat=sum([], {});// -> "[object Object]"constguessWhatAgain=sum({}, []);// -> 0
Bad
functionsum(a: number, b: number): ?number {// 当我们在JS中不做置换和/或流类型检查时,覆盖这种情况。if(typeofa !=='number'&&typeofb !=='number') {returnundefined; }returna+b; }// 这个应该在转换/编译期间失败。constguessWhat=sum([], {});// -> undefined
你应该有不能到达的代码
这是你的 “Plan B”.
Good
functionsquare(num) {if(typeofnum==='undefined') {returnundefined; }else{returnnum **2; }returnnull;// 这就是我的"Plan B".}
Bad
functionsquare(num) {if(typeofnum==='undefined') {returnundefined; }returnnum **2; }
三角法则
就像鸟巢,鸟巢,鸟巢。
Good
functionsomeFunction() {if(condition1) {if(condition2) {asyncFunction(params, (result)=>{if(result) {for(;;) {if(condition3) { } } } }) } } }
Bad
asyncfunctionsomeFunction() {if(!condition1||!condition2) {return; }constresult=awaitasyncFunction(params);if(!result) {return; }for(;;) {if(condition3) { } } }
混合缩进
避免缩进,因为它们会使复杂的代码在编辑器中占用更多的空间。如果你不喜欢回避他们,那就和他们捣乱。
Good
constfruits=['apple','orange','grape','pineapple'];consttoppings=['syrup','cream','jam','chocolate'];constdesserts=[]; fruits.forEach(fruit=>{ toppings.forEach(topping=>{ desserts.push([ fruit,topping]); });})
Bad
constfruits=['apple','orange','grape','pineapple'];consttoppings=['syrup','cream','jam','chocolate'];constdesserts=[]; 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文章
4637浏览量
67608 - GitHub
+关注
关注
3文章
461浏览量
16153
原文标题:GitHub这份垃圾代码书写准则,火了
文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。
发布评论请先登录
相关推荐
评论