大家好,今天小编关注到一个比较有意思的话题,就是关于java语言用什么手册的问题,于是小编就整理了1个相关介绍Java语言用什么手册的解答,让我们一起看看吧。
为什么阿里巴巴J***a开发手册中不允许魔法值出现在代码中?
在阅读《阿里巴巴J***a开发手册》时,发现有一条关于关于常量定义的规约,具体内容如下:
图中的反例是将数据缓存起来,并使用魔法值加链路 id 组成 key,这就可能会出现其他开发人员在复制粘贴的时候,少*** _ 的情况发生,这种很难去检查到,因为读取缓存不存在,可能会去数据库读取,很难察觉到。
如果在生产环境中,大量的请求进来,缓存全部失效,直接请求数据库,导致数据库连接过多,查询效率变低的问题发生,因此看来魔法值确实应该避免出现在代码中。
另外在 《Clean Code》 和 《重构》 等书中也提到了类似的问题,在代码中出现原始形态数字通常来说是坏现象,应该用命名良好的常量类隐藏它。
静态常量取代魔法值
像下面这个例子:
如果在不了解这块的业务的同事,在读到这块代码的时候,可能会想,75 是什么鬼,为啥和这个数比较,背后深藏着什么秘密吗?可能只有当时的开发人员记得了,导致代码可读性和可维护性极差。
如果声明一个常量,来替换该魔法值,可能就会使代码的可读性和可维护性大大增加。
这个案例描述是有问题的。故障的原因不是魔法值,而是拷贝错了且没有测试。不允许魔法值只是最大限度的避免J***a编码人为因素导致的错误,但是跨语言的调用还是可能出错。
道理很简单,阿里巴巴规模很大,员工很多,员工的流动也很频繁,试想一下一位代码中满是魔法值的老员工辞职了,让接替他的新员工怎么办?又让阿里巴巴怎么办?
作为互联网龙头企业,阿里巴巴没有那么多时间去让新员工适应老员工的代码写作风格,高效是它永恒的追求,所以才有了这么一套标准化的代码写作规范。
因为魔法值就像魔法一样,没人能懂啊。
比如我写一段程序
if (var == "2"){
} else if(var == "5"{
}
你看到这个代码能够知道 2 和5 分别代表什么意思吗? 是不是很懵。
写这样的代码,当时可能记得是什么意思,如果几个月后,后者作者离职了,
其他人再维护这样的代码,就搞不懂了。
对于任何语言这一点都是互通的。
一个未经定义的字面值会造成很多不可预知的错误。
如果这个字面值是一个全局缓存中某个常用数据的键,这个常用数据在系统很多模块都用到了。
当从全局缓存中访问这个数据时,如果键没有预先定义,那么***10次都不出错的可能会增大。
当然,这不是最重要的问题。更重要的是,如果有一天项目经理或者其他人觉得这个名字有问题,给改了个名字。那么,10个使用的地方,漏改的可能会更大。
还有更麻烦的是,当有人给缓存放另外的值得时候,可能不记得这个名字的缓存已经被占用了,然后把自己的值放进去了。这时候,使用这个缓存的其他模块就要不得不接受,缓存已经不是自己想要的事实。
使用预先声明的常亮能极大的避免这两种事情的发生。当然,不能完全避免,毕竟会有人不按规范来。
阿里巴巴的开发手册是他们自己开发过程中经验的总结,不能说是最好,但一定比大多数项目小组的规范要好很多。
有人说阿里的网站是php,但阿里的系统服务用的是Spring Cloud做的是服务集群。这部分完全是J***a实现的,阿里还是Apache基金会的重要成员,阿里自己重写了MySQL并应用在双十一,这些都不胜枚举。
魔法值一直都是编程的一大难题。我在开发中最讨厌别人用魔法值,因为我需要用这个值的时候,只能手动***或者手敲(很容易出错)。如果用静态常量我可以通过IDEA的代码提示获取到这个值,这样一来 方便很多了啊。
到此,以上就是小编对于j***a语言用什么手册的问题就介绍到这了,希望介绍关于j***a语言用什么手册的1点解答对大家有用。