我们曾经都做过这样的事情:当妈妈不注意的时候,偷偷地吃糖果零食,然后导致有了蛀牙。同样的,我们都违背过一些编程的基本规则,并且都会坚定地表示这种行为是不可取的。但我们就是偷偷爱着这些不良的编程习惯。
我们对所谓的编程规则嗤之以鼻,输出的代码也很糟糕——但我们依然活着。编程上帝没有下闪电劈死我们,我们的电脑也没有爆炸。事实上,只要我们能编译和发布代码,客户似乎就很满意了。
这是因为糟糕的编程不像安装电路或者摸老虎屁股那样有直接的危害性。大多数时间里它也是可以工作的。规则通常是作为一种指导或格式上的建议,并没有硬性规定一定要遵守,也不会导致代码马上死掉。当然,你的代码可能会被人耻笑,甚至可能大家公开嘲笑你,不过,这种挑战惯例的行为可以让人增加一点颠覆传统的快感,哪怕是在不经意间。
为了让问题变得更加复杂,有时候违反规则反而更好。(一般人我不告诉他!)出来的代码会更干净,甚至可能会更快和更简单。规则通常显得太过于宽泛,有技巧的程序员可以通过打破这些规则来提高代码。不要告诉你的老板,这对你的编码生涯会很有意义。
下面这9个编码习惯,虽然在编程规则中是被驳斥的,但我们很多人就是会不由自主地使用它们。编程习惯No. 1:使用goto关于禁止使用goto可以追溯到许多结构化编程工具还未面世的时代。如果程序员想要创建一个循环或跳到另一段程序中,那么他们需要输入goto后再跟一个行号。过了几年之后,编译器团队让程序员使用字符串标签取代行号。这在当时被认为是一个热门的新功能。
有的人认为这会导致“意大利面条式代码”。代码会变得不可读,并且很难理解代码的执行路径。线程混乱,缠缠绵绵到天涯。Edsger Dijkstra就三令五申地表示应该禁止这个命令,他有一份诙谐的手稿,题目为《Goto语句害人不浅》。
但绝对的分支是没有问题的。这就让人纠结了。通常,巧妙的break语句和return语句可提供一个非常干净的关于代码在那个时候执行什么的声明。有时候,添加 goto到case语句会比更恰当的多级嵌套的if-then-else语句块更易于理解。
也有反例。在苹果的SSL堆栈中的“goto fail”安全漏洞就是最好的例子之一。但是,如果我们能够仔细避免case语句和循环的一些尴尬问题,那么我们就可以嵌入良好的绝对转移,使阅读代码的人更容易明白这是怎么回事。我们可以插入break和return语句,让每一个人感觉更清洁和更愉快——可能得除了goto的敌视者。
蓝鸥科技西安中心,移动互联网科技育人专家,教育部产学合作协同育人项目承办企业,专注西安Java培训、西安大数据培训、西安unity培训,西安VR/AR培训、西安UI设计,西安HTML5培训、西安PHP培训,选择蓝鸥,不止高薪更是高起点!