同样的逻辑,两种不同的代码写法,为啥大部分码农喜欢第一种?
程序代码的奇妙之处在于他足够的灵活,对于大部分计算机语言,关键字也就几十个,但是就凭这个几十个关键字的灵活运用却能生产出无数个不重样的软件产品与功能,就像人类语言一样,常用字也就几百个,但是就凭这几百个常用字就能用来各种语言表达与交流,也许这就是所有语言的共同的奇妙之处吧,当然,在编程方面,虽然每个公司都有自己相应的编码规范,编码规范能最大程度的约束所有程序员的编码风格保持统一,但是到具体细节时,也是编码规范不能触及的地方,对于同样的功能,不同的程序员有着不同的细节实现,往往一段代码的好坏(比如效率,可读性,可扩展,代码简洁干练,设计模式等)都提现在这些细节上。
说起代码的可读性指的是对人的,并不是对计算机的,对计算机来说没有可读性而言,最终都是转化成二进制,可读性怎么定义呢?没有标准的答案,就字面意思,就是看起来轻松,让人很容易读懂,但是每个人能力不一样,读代码的轻松程度也是不一样的,你认为比较难读的代码也许换一个能力更强的来说,读起来就相对轻松,总之,可读性也是相对而言的,那么咱们就不妨拿一个网友提供的代码作为例子来展开讨论,近期,一名程序员网友晒出了一段代码的两种写法,他个人更喜欢第一种写法,因为他觉得觉得读起来比较符合人类的自然思维,易读。但是他看很多开源代码都更喜欢第二种。针对这样的情况,让我们一起看看其他网友们都是怎么认为的吧!
网友一:return a.func1()&& a.func2()&& a.func3();
上世是朵花:为这名网友点个赞,这么写没毛病,一行代码所实现的功能与上面的方法的效果是一样的,不过我个人并不提倡这么写,代码是简洁了,可读性并不高,大多数人并不习惯这样的方式。
去哪儿员工:阿里的Java规约推荐第一种
上世是朵花:看来,第一种写法还是符合大众的思维习惯!
网友三:效率都不一样 哎 我还得每行看 怕你if里面有坑
上世是朵花:这名网友的观点并不是很赞同,后面详细解释。
网友四:说第一种要全条件判断的,你在开玩笑?retun都阻止不了后面的判断?
上世是朵花:赞同,只要if符合条件,后面的代码是不会继续执行的。
网友五:我记得网络上那个阿里开发手册里就推荐第一种, 第一种有个好处if else不会套很多层
上世是朵花:效率上的差别几乎忽略不计,完全是可读性与思维习惯上的问题。
网友六:都不好,条件多的话可以用switch
上世是朵花:switch 适合多种case的情况,目前的场景是一些boolean表达式,并不太适合用switch.
网友七:第一个总觉得闭合的不好,错觉吧
上世是朵花:还好吧,每个人习惯不一样。
网友八:前三个if不是可以或语句合并么
上世是朵花:是的,可以“或”语句合并,当然也可以“且”语句合并,把"!"去掉,像第一名网友的写法,不论是“或”还是"且”合并,貌似可读性都不是很高,并不建议这种写法,有时太简洁也不一定好。
针对这两种写法,效率的差别就谈不上了,完全是一个思维习惯的问题,有的人更喜欢第一种,有的人则更喜欢第二种,从本次讨论结果可以看出大部分网友更喜欢第一种,但也不代表所有人,也许有的地域的程序员更习惯第二种写法,不论是第一种还是第二种,执行过程是一样的,都是每一个if都会检查的,只要符合if条件就直接return了,后面将不再执行,并不是像有的网友说的第一种写法是全检查第二种则不是,关于有的网友说的switch与if
else效率问题是要看计算机语言了,有的计算机语言switch最终转化成的还是ifelse,只是一个语法糖而已,对于有的语言,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true,编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,当然对于本案例中说的情况并不适合使用switch。像这种对于同一功能不同写法的例子还有很多,欢迎大家在下方评论区分享交流!
以上所有图片均来之互联网
大家好,我是“上世是朵花”。如果你有什么好的看法或者观点可以在评论区展现你的才华,互动交流,如果想进一步了解我,那就关注我吧!(微信公众号:sssdhua )