你的代码 STYLE
程序员几乎每天都在跟代码打交道。一开始接触的是自己写的代码,合作项目后,开始接触别人的代码。接触别人代码的时候是不是有遇到过以下的情形:
接手一个新项目,打开项目的源码目录,一股腐朽的气息扑面而来。接下来映入眼帘的是命名各种大小写不一的源码文件。你随便打开一个看看,一堆乱七八糟的命名还充满了各种V1,V2的接口。
时不时还可以看见前人写下的注释:
“f**k!“
”挖槽,还有这操作!“
”这个是xxx写的,有问题找他!“
你手扶额头,做偏头疼状: 接下来又要蛋疼了!
当然也有人会很兴奋: 我又可以重构你啦! 哈哈 !。
又接手了一个新项目,打开项目的源代码目录,一股清新的气息扑面而来。规整命名的源代码文件映入眼帘,打开源码文件,接口定义一看就浑身爽,逻辑代码写得是规规整整,各种类,变量的命名也是规范的一逼。
你浏览了一番后,就立马想认识代码的作者,想先去膜拜一下。代码作者真乃大牛也!
以上是大家在接手别人代码的时候,会遇到的情形。
那你的代码写的怎么样呢?代码风格又是如何?
我总结了一下,这几年遇到的代码风格,来看看,你的代码是属于哪种风格吧。
一 乱七八糟型
这种代码,你一打开,感觉就臭的要命。似乎一刻都不想停留,想马上把ide关了。
当你硬着头皮看下去,发现各种命名不规范,接口定义冗长且不清晰,看了大半天,还是没看明白其中的逻辑。
时不时还会在眼前飘过几行:
“f ** k!”
“cao !”
"不是我写的 --- by xxx!"。
我见过最搞笑的代码:
接口定义为: xxxConnect。
然后接口的下面附上了一句注释:
“这个接口本义是 xxxNotConnect,写代码的时候忘记了Not,现在已经被到处引用,改不了了!”
我当时看完,心里: “挖槽, 还有这种操作,真是人才啊!” 笑得牙都快掉下来了。
乱七八糟型的代码,估计也是各个公司最多的了。
遇到它们的时候,大部人也只能一直忍着,好点的会在改代码的时候,尽力重写一点是一点,比较随便的同学,就随意的加上几行,然后在特别挫的地方,补上一句注释:
“此处有坑,请注意! 此处有坑,请注意!”
乱七八糟型的代码,已经完全失控于写代码的人,也谈不上是一种风格了。不过确实很多,所以要列出来。
二 贵族型 (设计模式型)
这种风格的代码,代码命名规范,接口定义完整且丰富。你刚开始接触,看的也是清风拂面,如在春天。
这种风格的代码,感觉就是代码的贵族。雍容华贵,出生于贵族血统。命名规范,接口规范,设计模式的使用,都是教科书式的设计,保持着纯正的血统。
不过这类代码风格容易走入过度设计的极端。有时候,会把一个本来可以用30行代码搞定的功能,硬是给写出了300行代码的高度。当你花了半天,解构完各种设计模式后,才终于理解了要实现的功能,你才在心里骂娘。
这种代码风格,多见于各种客户端(andrios,iOS),或用 java 的后台, 特别是写惯 java 的同学。因为 java 本身的代码设计就采用了更多的设计模式,运用得当,便可是代码中的贵族,运用过度,则显得臃肿不堪,像个肥胖臃肿的胖子。
遇到过一个 leader 写的网络框架,设计模式运用的恰到好处,而且代码逻辑相当清晰,感觉整套的代码一气呵成,优雅华贵,风度翩翩。
当时我觉得这就是代码中的贵族,那位大佬真神人也
三 隐士风(极简型)
这类风格的代码追求极简的设计,极度关注代码的逻辑,对代码层面的封装,更多以实用为主。
这种风格的代表,我觉得是 linux 的内核。
linux的创始人 linus 说过, 他写代码的时候,先是进行物理设计,这个物理设计就是指实现这个功能所涉及的数据结构,内存结构,当这部分的设计完成后,代码是围绕数据结构书写的。
所以也被称之为: 围绕数据结构的设计。
这种代码风格极简,你只要了解这个功能所使用的数据结构,就能很快的理解代码。多见于底层系统,比如网络框架,存储系统,操作系统内核,是代码中的隐士:简洁但威力巨大。
因为极简,也使得性能问题可以更容易定位,适合写出高性能的代码。
这种极简风格的代码,对于底层系统比较适用。底层系统因为需求不多变,但通常对性能要求更高,所以比较合适。如果是用于业务逻辑,就会显得代码设计不到位,使得扩展性太差。
我有一段时间特别喜欢这种风格的代码,可能跟我当时多做的是底层系统有关。
后来转到写业务逻辑的代码,就发现这种极简的代码设计在应对复杂多变的业务需求的时候,会出现扩展困难,不利于业务系统的开发。
四 极客型
还有一种代码风格。 你第一眼看去,简直逼格满满,各种奇技淫巧,语言的各种高级特性都用上了,而且用的极尽逼格之事。
很多复杂的操作,本来需要几行代码实现的, 极客型的代码,估计一行就给你实现出来。理解的人,一眼可以看明白,不理解的,估计还要研究个半天才能明白过来。
各种语言的高级特性或者新特性被用的满地都是,C++ 模版, C 的宏,用的是神乎其技。但看的人是苦不堪言,又不好意思吐槽,显得自己太low逼,最后大家就只能敬而远之,都不愿意去碰这块代码了,真是压力满满呀。
这类代码纯从理论的角度来说,其实是写的不错的,只不过是没有照顾到大多数人的习惯和理解。
特别是业务层面的代码,过于追求代码特性的运用,最终会导致代码的维护变得特别困难,在人员变更频繁的团队更是如此。
我个人更愿意用朴实的代码去实现一些功能,即使他的性能差些,逼格低些,但是其他人更容易看懂。
以上,是我曾经遇见的一些代码风格。
杂乱无章型的代码最不好,完全没有尝试去做些代码设计和思考。
贵族型的代码要防止过度设计。
写隐士型代码的人,在写业务代码的时候,要多考虑业务代码的扩展性。
极客型的coder, 要照顾下周边同学的理解能力。
你还遇到过什么风格的代码,在留言里写出来,给大家观摩,观摩 。
推荐阅读:
你好,我是大飞。十年互联网人,高级工程师,技术leader。
支持就给个好看呗 : )