简洁的代码不仅能让阅读者方便理解程序的意图还能方便维护与迭代,规避冗长且臃肿的代码给人一种清爽的感觉。简洁的代码在维护上花费更少的时间,更易于被阅读和领会,花费更少的时间去弄清楚实际问题进而为修复、修改、以及扩展等操作留下更多的时间;更清晰地交流想法,程序开发离不开协作而简洁的代码可以减少项目成员之间可能产生的歧义,从长远来看犯更少的错误更快地解决问题。那么IT程序员该如何编写出优秀且简洁的代码呢?
1、描述性名称
程序中的变量、类和函数给其他IT程序员、以及应用程序底层逻辑之间的接口调用。因此,当对变量、类和函数使用不明确且非描述性的名称时,实际上就是在扰乱阅读代码者对应用程序逻辑的理解。使得代码看起来整洁的基本技巧之一便是使用描述性名称。
2.具有实际意义
一定看到过那些长达数百甚至数千行的函数?在浏览、理解、甚至是编辑的时候会觉得无比痛苦。就算行间有相应的注释其实际效果往往也是“杯水车薪”。而简洁的代码会被分解成不同目的的代码块,每个子函数都被设定为完成某个具体的任务,而每个类也都代表了一个特定的概念。由此带来的简洁性更适合局部调整也更适合问题的定位与排查。
3.删除多余的代码
在修复或优化某段代码的过程中特意将其注释掉并在其下方开始动手重写新的代码。这样做的目的只是纯粹为了保留旧的代码以备不时之需。不过,随着时间的推移可能会不知不觉地积累了大量的、不再需要的被注释掉的代码块。这些代码块无疑会让这些源代码变得混乱不堪。而且,多数实际情况往往是由于周围的相关代码、及其环境也早已发生了迭代,因此这些被注释掉的代码其实并不可能再被恢复使用了。
这种注释掉旧代码的做法,完全可以被如今时尚的源代码控制系统所取代。可以通过使用Git或Mercurial之类的工具,及时、准确、自动化地开展源代码管理工作。为了让应用服务轻便而敏捷,也可以有意识地通过现成的Web框架,避免“重复造轮子”,进而利用由框架提供的类库,来简化自己的代码。
4、可读性
大多IT程序员会把“简洁的代码”和“聪明的代码(clevercode)”混为一谈,并简单地认为“把十行代码压缩成一行以减少屏幕空间的占用”,便是简洁的代码。其实在大多数时候这样的代码不一定真的容易被理解。
IT程序员们可以将其视为自己的独门秘籍。它们往往被用来证明自己的编程技能甚至被用作炫技之需。而对于简洁代码的编写应该保持开放的心态:代码量的多少并非代码是否简洁的唯一衡量标准。除了实现代码的功能的代码还需要保持一定的可读性。毕竟下一次阅读该代码段的很可能不是别人、正是你自己,谁都不想给自己的将来刨坑埋雷。
5、编程风格
每个IT程序员都有自己的编程风格,但并不推荐或强求大家去遵从某种所谓最佳编程风格。如果习惯在行间使用大括号,如果想在方法调用之前加上空格,如果更喜欢使用制表符而不是空格的话这些都可以。只不过请保持此类用法的一致性。同时,如果打算将camelCaseNaming用作变量,那么就请不要将其与underscore_naming混为一谈;如果在某个地方使用了GetThisObject(),那么就请不要在其他地方采用FetchThatObject()。
6、架构
使用各种现成的范例和架构来创建不同的项目。当然,前提条件请选择最适合的,并不是所谓最好的。例如模型-视图-控制器模式一直是Web开发领域最流行的架构。它不但有助于保持代码架构的清晰合理而且能够使得后期的维护工作量最小。类似地实体-组件-系统模式在游戏开发界也非常流行。毕竟它能够协助实现模块化的游戏数据和逻辑,使得维护更轻松同时能够生成更加易读的代码。
7、语言惯用法
所熟悉的Python、Java和JavaScript等不同的语言都有着不同的编程思想与习惯。它们之间的差别或是巨大或是细微。例如:Python代码会完全依赖紧凑代码和鸭子类型;而Java则更倾向于冗长和明确的代码。同时每一种语言都会鼓励使用自己的惯用法,如Python中的列表推导式。
与此同时,我们也要警惕所谓的“反面模式”。虽然那些由前人积累的、解决某些软件开发特定问题的模式,会让后辈获益无穷;但是如果它们是一些狭隘的、仅对特定需求有效的模式的话,那么就应该被避免继续沿用。
8、借鉴
俗话说“有样学样”,如果想编写出简洁的代码首先就要知道简洁的代码应该是什么样子。而一些大师级前辈的程序作品就能起到很好的示范作用,学习他们背后的编程思想、逻辑、以及代码习惯。
显然,不可能随便跑进微软总部去“偷师”他们的项目,但可以通过Github上的各种展示性项目随时浏览到典型的行业应用、以及各个开源项目的源文件代码。毕竟,这也是开源项目的一个初衷:让更多的人可以从中学习编程。通过这种社区互助的方式,的代码质量会得以迅速提高。
9、注释
“附上注释”是编程世界中的一项建议。不过在实际编程中新手IT程序员一旦被建议要尽可能地留下注释。当然那些不必要的描述、甚至会透露敏感信息的过度注释也可能会带来适得其反的效果。注释是被用来解释为何需要这段代码,而不是讲解代码实际能够做什么。如果的代码写得足够简洁的话,其作用是不言自明的。
10、重构
正如编辑属于文字写作过程的一部分那样重构应该是编程过程的一部分。其实重构能够起到协助优化代码的作用而不会影响其实际行为。同时,重构也有利于提高代码维护的效率。随着时间的推移和经验的积累,在回顾或维护整个软件项目时总能发现一些对于首次编写不满意、且值得重构的代码。