垃圾代码还能出圈?手把手教你写垃圾代码,从入门到精通!

全世界只有3.14 % 的人关注了

爆炸吧知识

转自:机器之心

参与:思

如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进、使用清晰的变量名和方法名、在必要时提供文档与注释、不要过度精简代码等等。

但是对于什么是烂代码,你有比较清晰的认识吗?

在 GitHub 上有一个新项目,它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写。这些准则将指导你写出最亮眼的烂代码。

为了保持与原 GitHub 项目一致的风格,下文没有进行转换。读者们可以以相反的角度来理解所有观点,这样就能完美避免写出垃圾代码。

repo 地址:

https://github.com/trekhleb/state-of-the-art-shitcode

当然,以下十九条垃圾代码书写准则并没有面面俱到,如果读者们发现有一些难以忍受的烂代码习惯,也可以留言发表你的看法。

第一条:打字越少越好

如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。如下所示,「Good」表示遵循该规则的示例,Bad 表示没遵循该规则的示例。

第二条:变量/函数混合命名风格

我们需要混合命名方法与变量,这样才能体现命名的多样性。

第三条:不要写注释

反正代码都看得懂,为什么要写注释?或者说,反正没人看我的代码,为什么要写注释?

第四条:使用母语写注释

如果你违反了第三条规则,那么至少写注释需要用你的母语或者其它语言。如果你的母语是英语,那么你也算违反了这条规则。既然编程语言绝大多数都是用英文,那么为什么不用其它语言注释一下?

第五条:尽可能混合不同的格式

同样,为了代码的多样性,我们需要尽可能混合不同的格式,例如单引号或双引号。如果它们的语义相同,那就应该混用。

第六条:尽可能把代码写成一行

如果一系列参数与方法都是一起实现的,那么代码也要写在一起。

第七条:发现错误要保持静默

当你发现某些错误时,其他人不需要了解它,因此不需要打印出日志或 Traceback。

第八条:广泛使用全局变量

使用全局变量,是面向「全球化」不可或缺的部分。

第九条:构建备用变量

以防万一,我们需要创建一些备用变量,在需要时随时调用它们。

第十条:Type 使用需谨慎

一般不要指定变量类型或者经常做类型检查,无类型才是最好的类型。

第十一条:准备「Plan B」

你需要准备一些运行不到的代码(unreachable code),它们可以作为你的「Plan B」。

第十二条:嵌套的三角法则

如果代码有一些嵌套结构,或者说缩进空行的结构,三角法则是最漂亮的。

第十三条:混合缩进

我们需要避免采用缩进,因为缩进会使复杂代码在编辑器中占用更多的空间。如果一定要采用缩进,那么就使用混合缩进策略。当然,这种策略在 Python 中是行不通的,因为它靠缩进来确定代码结构。

第十四条:不要锁住依赖项

每一次要安装新库时,更新已有的依赖项。为什么要维持之前的版本呢,我们需要时刻保持最新的第三方代码库。

第十五条:长函数比短函数好

不要将程序整体逻辑分割为一些代码块,要是 IDE 突然不行了,它找不到必要的文件或函数怎么办。因此把代码写在一个主体函数中,并且不再维护额外的函数导入或代码文件,那么这样的方法是最稳定的。

单个文件一万行代码是没问题的,单个函数一千行代码也是没问题的。

第十六条:代码不需要做特定测试

这些测试通常是重复且无意义的工作。

第十七条:尽量避免重复代码

按你的想法写代码,尤其是在小团队中,毕竟这是「自由」准则。

第十八条:构建新项目不需要 README 文档

在项目前期,我们可以暂时保持这种状态。

第十九条:保存不必要的代码

在写代码的过程中,经常会产生很多测试代码。这些代码也是非常重要的资料,因此不能删除掉,最多只能注释掉。

转自:机器之心,转载仅供学习交流,如有侵权请联系删除。

????????????

  超超超级宠粉福利   

锦鲤好运书单,100本免费送!

百本好书,六大类目,总有一本适合你

后台回复“领书”查看书单,立即自选领书

万水千山总是情,点个 “在看” 行不行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java以Blob形式存储,读取图片并在jsp页面显示图片流

2019独角兽企业重金招聘Python工程师标准>>> 废话少说代码伺候: 封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。 1 package org.blog.util; 2 import java.io.F…

“ShardingCore”是如何针对分表下的分页进行优化的

首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2版本的分表组件&#xff0c;首先我们来快速回顾下目前市面上分表下针对分页常见的集中解决方案分表解决方案解决方案skip<100skip<10000skip>10000优点缺点内存分表速度快O(n)&#xff0c;nskip*分表数…

docker pull 私有_【赵强老师】管理Docker镜像

一、什么是Docker的镜像Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

看着女朋友的肚子,以肉眼可见的速度大起来......

1 女生的肚子有多神奇▼2 你的论文除了导师真没人想要▼3 脑子&#xff1a;各部门注意&#xff01;这次一定可以&#xff01;手&#xff1a;&#xff1f;&#xff1f;&#xff1f;▼4 这孩子可能是高估了自己的大长腿▼5 到处说前男友死了算违法吗&#xff1f;▼6 男人妖…

违反GPL协议,法院判罚了!国内首例

整理 | 一君出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;近日&#xff0c;一起关于 GPL 版权纠纷案裁判文书公示。一审判决书显示&#xff0c;GPL3.0 协议是一种民事法律行为&#xff0c;具有合同性质&#xff0c;可认定为授权人与用户间订立的著作权…

开篇 — 【面向对象设计模式学习】

说明&#xff1a; 关于设计模式的文章网上已经很多了&#xff0c;本人也只是想参考别人的文章来系统地学习一下设计模式&#xff0c;因此&#xff0c;这个系列并不是一个系列教程&#xff0c;而仅仅是作为本人学习设计模式的一个学习笔记&#xff0c;此外&#xff0c;由于本人能…

又来了!深度学习PyTorch与TensorFlow到底哪家强?

全世界只有3.14 % 的人关注了爆炸吧知识自从2012年深度学习再一次声名鹊起以来&#xff0c;许多机器学习框架都争先恐后地要成为研究人员和行业从业者的新宠。面对如些众多的选择&#xff0c;人们很难判断最流行的框架到底是什么。在某些情况下&#xff0c;深度学习或深度迁移学…

mysql从多个表查询数据类型_MySQL 之 多表查询

阅读目录一.多表联合查询#创建部门CREATE TABLE IF NOT EXISTSdept (didint not null auto_increment PRIMARY KEY,dnameVARCHAR(50) not null COMMENT 部门名称)ENGINEINNODB DEFAULTcharset utf8;#添加部门数据INSERT INTO dept VALUES (1, 教学部);INSERT INTO dept VALUES …

通过 GitExtensions 来使用 Git 子模块功能

通过 GitExtensions 来使用 Git 子模块功能目录一、前言二、Git 子模块三、子模块更改提交四、更新子模块五、[附] 去除最近的提交记录独立观察员 2021 年 9 月 5 日一、前言众所周知&#xff0c;编程&#xff0c;尤其是面向对象编程的一个重要思想就是 “封装”&#xff0c;可…

Linux系列-Red Hat5平台下的Postfix邮件服务搭建(二)

咱们接着上次的说&#xff0c;本次没有小标题。想了半天也没想出个好名子来&#xff0c;因为这次我们要做三件事&#xff1a;1.搭建基于Postfix的webmail&#xff1b;2.设置用户别名和邮件群组&#xff1b;3.设置邮件大小、邮箱空间的限制。环境还是之前的&#xff0c;做之前可…

单片机断电后静态存储区里面还有数据吗_单片机启动流程和存储架构详解

最近在给公司的ADAS DCU做内存分配&#xff08;Memory Allocation&#xff09;&#xff0c;在这儿记录一下相关知识点&#xff0c;也算是给中文社区做贡献了。目录&#xff1a;1. ECU启动流程2. 存储空间解析3. TC397单片机的Memory Map和一些备注1. ECU启动流程图总比文字直观…

培养有见识的孩子,这6部适合孩子的纪录片,在家也能涨知识!

全世界只有3.14 % 的人关注了爆炸吧知识对孩子来说&#xff0c;好的纪录片就像打开了一扇新世界的大门&#xff0c;让他们了解更多世界的奇妙之处。BBC&#xff08;英国广播公司&#xff09;的纪录片题材广泛、制作精良。看这些经典的纪录片&#xff0c;既可以追溯上下数千年的…

Beta版本发布报告

项目名称学霸系统写手机客户端项目版本Beta版本负责人北京航空航天大学计算机学院 hots团队联系方式http://www.cnblogs.com/hotsbuaa/要求发布日期2014-12-28第一阶段基本功能已经完成&#xff0c;因此第二阶段的任务是&#xff1a;美化UI&#xff0c;修复接口&#xff0c;修复…

Dapr牵手.NET学习笔记:开篇

dapr&#xff0c;一个为分布式应用程序的运行时&#xff0c;为开发者在对接分布式组件时&#xff0c;提供了便利。使用dapr带来的好处可扩展性&#xff0c;因为它是通过sidecar的理概念来集成其他运行时的。同时dapr还提供了多种语言的SDK。关于dapr更多介绍&#xff0c;官方文…

vue 一个页面有点请求需要同时发送_前端性能优化,这些你都需要知道

来源: 海洋里的魔鬼鱼前言最近花了一些时间在项目的性能优化上&#xff0c;背后做了很多工作&#xff0c;但是最后依然没有达到自己想要的结果&#xff0c;有些失望&#xff0c;但是还是记录下自己的执着。性能优化总结&#xff1a;减少请求次数、减小资源大小、提高响应和加载…

男人能有什么错呢?

1 这上菜方式厉害了&#xff01;2 谁上学的时候还没转过笔了&#xff01;3 和朋友的塑料友情 图自别叫我P图仔4 非洲最致命的猫&#xff01;传说能撂倒长颈鹿&#xff01;大家估量一下&#xff01;5 狗子&#xff1a;你放开我好吗&#xff1f;&#xff1f;6 这位小姐姐真的很酷…

H3C 5510 交换机DHCP设置

DHCP不能发现网络上非DHCP客户机已经在使用的IP地址&#xff1b;当网络上存在多个DHCP服务器时&#xff0c;一个DHCP服务器不能查出已被其它服务器租出去的IP地址&#xff1b;DHCP服务器不能跨路由器与客户机通信&#xff0c;除非路由器允许BOOTP转发。PC发出的广播包&#xff…

opentrace在mysql中使用_采用OpenReplicator解析MySQL binlog

Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样)&#xff0c;然后接收和分析binlog&#xff0c;最终将分析得出的binlog events以回调的方式通知应用。Open Replicator可以被应用到MySQL数据变化的实…

雷军:有人说我写的代码像诗一样优雅~

全世界只有3.14 % 的人关注了爆炸吧知识整合整理&#xff1a;程序员的那些事&#xff08;id&#xff1a;iProgrammer&#xff09;雷军的代码像诗一样优雅↓↓↓有些网友在评论中质疑&#xff0c;说雷军代码不会是「屎」一样优雅吧。说这话的网友&#xff0c;也许是开玩笑的&…

mysql分析日志_MYSQL 索引(三)--- SQL日志分析

慢查询日志Mysql 的慢查询日志是 Myql 提供的一种日志记录&#xff0c;用来记录在 Myql 中响应时间查过阈值的语句&#xff0c;具体指运行时间超过 long_query_time 值的 SQL&#xff0c;则会被记录在日志中。long_query_time 默认为 10&#xff0c;单位为秒。默认情况下&#…