有的人认为这会导致“意大年夜利面条式代码”。代码会变得弗成读,并且很难解得代码的履行路径。线程纷乱,缠绸缪绵到天际。Edsger Dijkstra就三令五申地表示应当禁止这个敕令,他有一份滑稽的手稿,标题为《Goto语句害人不浅》。
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
我们曾经都做过如许的工作:当妈妈不留意的时刻,偷偷地吃糖不雅零食,然后导致有了龋齿。同样的,我们都违背过一些编程的根本规矩,并且都邑果断地表示这种行动是弗采取的。但我们就是偷偷爱着这些不良的编程习惯。
我们对所谓的编程规矩嗤之以鼻,输出的代码也很糟糕——但我们依然活着。编程上帝没有下闪电劈逝世我们,我们的电脑也没有爆炸。事实上,只要我们能编译和宣布代码,客户似乎就很知足了。
这是因为糟糕的编程不像安装电路或者摸老虎屁股那样有直接的伤害性。大年夜多半时光里它也是可以工作的。规矩平日是作为一种指导或格局上的建议,并没有硬性规定必定要遵守,也不会导致代码立时逝世掉落。当然,你的代码可能会被人嘲笑,甚至可能大年夜家公开嘲笑你,不过,这种挑衅惯例的行动可以让人增长一点颠覆传统的快感,哪怕是在不经意间。
为了让问题变得加倍复杂,有时刻违背规矩反而更好。(一般人我不告诉他!)出来的代码会更干净,甚至可能会更快和更简单。规矩平日显得太过于宽泛,有技能的法度榜样员可以经由过程打破这些规矩来进步代码。不要告诉你的老板,这对你的编码生活会很有意义。
编程习惯No. 1:应用goto
关于禁止应用goto可以追溯到很多构造化编程对象还未面世的时代。如不雅法度榜样员想要创建一个轮回或跳到另一段法度榜样中,那么他们须要输入goto后再跟一个行号。过了几年之后,编译器团队让法度榜样员应用字符串标签代替行号。这在当时被认为是一个热点的新功能。
有一个标准规矩是,法度榜样员在完成数据构造课程的第二年,不该该写竽暌姑于存储数据的代码。根本上我们须要的所有的数据构造,已经有人写好了,并且其代码已历经多年的测试和再测试。它和说话绑缚在一路,并且经常是免费的。你的代码只能培养bug。
但绝对的分支是没有问题的。这就让人纠结了。平日,奇妙的 break 语句和return 语句可供给一个异常干净的关于代码在那个时刻履行什么的声明。有时刻,添加 goto 到case语句会比更恰当的多级嵌套的if-then-else语句块更易于懂得。
也有反例。在苹不雅的SSL客栈中的“goto fail”安然马脚就是最好的例子之一。然则,如不雅我们可以或许细心避免case语句和轮回的一些难堪问题,那么我们就可以嵌入优胜的绝对转移,使浏览代码的人更轻易明白这是怎么回事。我们可以插入break和return 语句,让每一小我感到更干净和更高兴——可能得除了goto的仇视者。
编程习惯No. 2:成功避开文档
我的一个同伙有一个异常精明的老板,这位老板固然大年夜来没有写过任何代码,但却秉持着每一个功能都必须包含在文档中的理念。哪个法度榜样员不供给注释,那么他就会受到处罚。所以,我的同伙在他的编辑器中联入了一个有点像人工智能的玩意儿,于是乎,他的每一个功能就都有几行“文档”了。因为这位精明的老板还不敷聪慧到能懂得这些注释其实啥意思也没有,所以我的同伙逃过一劫。他的代码经常被作为正式文档。我想,他应当将近升职了!
很多函数办法,甚至一皓类或多或少都能自文档化。冠以insertReservation或cancelReservation或 deleteAll 等名称的函数并不须要画蛇添足来解释它们的感化。为函数取一个精确的名字往往就足够了。事实上,这比写一段长长的注释要好,因为函数名可以涌如今代码中的其他处所。而文档只能默默地呆在某个角落。自文档化的函数名可以改进它们出现的每个文件。
在有些情况下,写文档甚至会导致情况变糟。例如,现代码瞬息万变,团队像疯了似的重构的时刻,文档会产生不合。代码是如许写的,但文档解释的┞氛样四五个版本以前的情况。这类“过时”的文档平日位于代码顶部,有的人会在这里对代码应当产生什么作一个好梦总结。是以,尽管重构团队已经细心修改了相干的注释,但照样会漏掉文件顶部的┞封段“好梦总结”。
现代码和文本出现不合的时刻,注释就变得毫无价值,甚至会产生误导。在如许的情况下,优胜的自文档化的代码显然胜出了。
编程习惯No. 3:同心专心鄙鲍多代码
老板忽然发神经地给团队发了一封憎恶的邮件:为了履行异常严格的风格规定,我们大年夜家都必须重写我们的代码。最神奇的请求是:每个行动尘土调或子句必须各自成行。你不克不及应用点语法持续调用函数。在一个分支语句中,你不克不及有两个及以上返回布尔值的子句。如不雅要定义变量,那么另起一行。如不雅你正在做一个复杂的计算,那么不要应用括号。每个片段也自成一行。
他认为他的┞封个法令将能使调试变得加倍轻易。就像你单步底时菌码一样,调试器会一个动作一个动作地进步。如许就不会卡在某一行。并且更轻易履行。
然则如许一来,键盘上的回车键烦不堪烦,因为我须要赓续地插入行。并且我敢肯定,老板是以还可以到处吹捧他的团队能写若干行代码。
唉,有时在同一行中声明一堆变量反而更轻易;有时把所有的布尔子句放在一路反而更简单——一切都能变得加倍紧凑。那也意味着,我们可以在屏幕上看到更多的逻辑而无需滚动鼠标。更易于浏览就意味着懂得起来更快。这才是简单的精华精辟。
编程习惯No. 4:不声明类型
那些酷爱类型化说话的人认为,如不雅为每个变量添加明白的数据类型声明,就可以写出更好的、没出缺点的代码。花一点时光来拼写类型,能赞助编译器在代码开端运行之前标记愚蠢的缺点。可能会让人认为苦楚,但很有赞助。这是编程中停止bug的一种有备无患的办法。
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 正如本年早些时刻报道的,谷歌筹划在Chrome上做出新的改进,以抵抗不须要的网站重定向。重定向就是你在浏览器中输入一个URL,却打>>>详细阅读
本文标题:程序员偷偷深爱的9个不良编程习惯
地址:http://www.17bianji.com/lsqh/39512.html
1/2 1