在一个新项目中,我最先做的事情之一,就是建立使用诸如Checkstyle和Findbugs之类工具的准则。目的是制定一些代码规范,以及避免通过静态代码分析就能够检测到的bug。
迟早会有人给出案例说这样太离谱了。其中的一个案例是Checkstyle的魔数检查。它会对任何没有定义常量就使用的数字字面量给出警告,除了-1、0、1和2。
很多开发者在这个检查方面都有问题,这可以从结果代码中看到。我看到过这样的代码:
private static final int FOUR = 4;
以及
private static final int FOUR = 5;
和我最喜欢的(我可不会这么做!)
firstname = rs.getString(1); lastname = rs.getString(2); city = rs.getString(2 + 1); zip = rs.getString(2 + 2); country = rs.getString(2 + 2 + 1);但是还有另一个引发讨论的不同案例。它是关于显而易见的常量,如把小数转换成百分比的100,或者在字节数和Kb数之间转换的1024。一些人认为它们不是魔数(或者不是那么糟糕的魔数),因为它们的含义很明显并且不会改变。
关于这一点我不同意。而且,任何时候我都会把它们写成常量。下面是原因:
1、 它的含义不是显而易见的。value*100是什么意思?是把一个小数转换成百分数?还是把一个以米为单位的长度,转换成厘米?或者是一个数乘以g*g的 粗略近似数,其中g是地球上的重力加速度?又或者是我把某个数乘以一个数组的长度,而长度恰好是100?说不清楚。使用一个恰当名称的常量就能搞定。
2、是的,我承认大多数这样的常量不会改变。但是定义常量(方法、类)的目的不(仅仅)是为了后面的变化,而是为了更容易阅读、理解和推理。因此在未来值是否会改变的问题是完全不相干的。
3、(这是我在大多数讨论中没有列出的论据)我只是不想去思考它,也不想让别人思考它。我见过数十个,很可能上百个例子,一个恰当命名的常量会极大地帮助理解一段代码。我很少看到它损害可读性的例子,并且没有一个会严重损害可读性。
注意:仅仅因为它是一个常量,并不意味着它必须被公开,包括类级别的字段。如果它只用在一个单独的方法中,使用局部变量就够了。
相关推荐
1.增加了括号校验,不允许使用SGS语法中未定义的圆括号和方括号。 2.增强了域对象列表的校验和棱柱列表的校验。 3.实现了编译警告功能,若选择了IgnoreWarning选择框,编译警告即不影响代码生成。 ===============...
DWR是一个可以允许你去创建AJAX WEB 站点的JAVA 开源库。它可以让你在浏览器中的Javascript代 码调用Web服务器上的Java 代码,就像在Java代码就在浏览器中一样。 DWR工作原理是通过动态把Java类生成为Javascript。...
DWR是一个可以允许你去创建AJAX WEB站点的JAVA开源库。它可以让你在浏览器中的Javascript代码调用Web服务器上的Java代码,就像在Java代码就在浏览器中一样。 DWR包含2个主要部分: 一个运行在服务器端的Java ...
完善头像上传,附件上传时允许管理员选择是上传到服务器上还是具专到数据库里。 3。论坛显示版块的子版块(本来功能就存在的。不过当时发现显示子版块不美观,所以就只在首页显示副版:) 现在已经提供。 V...
函数是编程中的关键概念之一,它允许您将一系列操作打包成一个可重复使用的单元。在Python中,您可以使用def语句来定义函数,这些函数可以接受参数并返回结果。通过使用函数,您可以更好地组织代码,提高可读性,...
修正的功能: 1:首页登陆时有时显示空白页 2:修正帖子列表显示的分页代码错误 3:修正后台管理“论坛组”不能上下位置移动 4:论坛帖子搜索。 5:修正个人短消息分页代码。 6:修正帖子...
5、怪物数据库的WALK_SPD字段允许为-1:表示当前怪物不移动 6、增加可在物品数据库中设置装备初始发光效果,字段为Effect 发光效果(1-9) 如果想通过脚本取消原本的发光效果,只需将发光效果设成10即可 [2012-04-15...
6.结账时,打折人可以手工输入名字(该名字可以不是已经建好的员工信息),且折扣数不做限制(对于具体的折扣数,该场子会通公文的形式给定具体人员的最低折扣数) {功能使用说明:当后台参数"是否允许手工输入员工...
该脚本允许您将代码从git存储库部署到服务器,而无需任何其他第三方服务。 我们开发了此脚本来为网站部署代码。 确保您了解此脚本如何工作,以确定它是否适合您的项目。 GitHub和BitBucket都提供Webhooks ,可在...
java future源码选择的塔 我在2013-2014年左右制作的基于...《黑暗之王》出现在21楼和41楼之间,机会不多。 41楼有100%的可能性出现黑暗之王。 如果您过早遇到他,并且在21-40楼的农场经验要尽可能高,请重置游戏。
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...
贝岭的matlab的代码欢迎来到纽约西纳特拉! 介绍 我们将为纽约市建立一个历史站点,因此我们将需要创建以下数据库结构: 您将拥有三个模型(及其对应的表) Landmark 、 Title 、 Figure (想想历史人物)。 一个...