在一个新项目中,我最先做的事情之一,就是建立使用诸如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、(这是我在大多数讨论中没有列出的论据)我只是不想去思考它,也不想让别人思考它。我见过数十个,很可能上百个例子,一个恰当命名的常量会极大地帮助理解一段代码。我很少看到它损害可读性的例子,并且没有一个会严重损害可读性。
注意:仅仅因为它是一个常量,并不意味着它必须被公开,包括类级别的字段。如果它只用在一个单独的方法中,使用局部变量就够了。
相关推荐
2. **魔镜概念**:魔镜项目的核心概念是将普通镜子转化为一个交互式的显示屏,能够在不影响镜子反射功能的同时,显示时间、天气预报、新闻、日程等信息。这通常通过在镜面前方安装一块透明的LCD屏幕或者LED背光板来...
【魔乐科技 CMS源代码】是一款由魔乐科技开发的基于JAVA技术的企业级内容管理系统(CMS),主要用于构建和管理信息网站。此系统以其强大的功能和完善的设计,为用户提供了一个高效、易用的内容发布与管理平台。 在...
这个场景通常出现在角色扮演游戏中,玩家通过键盘交互与游戏世界进行互动。 在描述中提到的“按方向键控制人物移动,按空格键施放魔法”,这是游戏的基本操作逻辑,涉及到键盘事件处理和游戏循环。在编程中,我们...
"魔乐再线spring代码"这份资料,涵盖了Spring框架的多个方面,包括但不限于上述内容。通过学习和实践其中的代码,开发者不仅可以加深对Spring的理解,还能提高实际开发技能,是Java开发者不可多得的学习资源。在实际...
描述中提到“cocos2d全部源代码”,意味着这套资源包含了构建游戏所需的所有编程代码,包括但不限于游戏逻辑、物理系统、动画、音效、用户界面等。"包含人物,地图,动作设计等全套资源"进一步指出,除了核心代码,还...
`pyheatmagic` 是其中一个魔法命令,它允许我们生成代码执行的热图,这是一种可视化方式,能够显示代码中哪些部分被频繁执行,从而帮助我们识别性能瓶颈。 在 IPython 中安装 `pyheatmagic` 魔法命令通常需要先安装...
在这个项目中,开发者通过JavaScript实现了一个模拟烟花绽放、星星闪烁的动态星空背景,为网页增添节日氛围。 1. JavaScript基础: JavaScript是一种广泛用于网页开发的脚本语言,它允许动态内容的创建,如动画、...
Java ME是Java技术在移动设备和嵌入式设备上的应用版本,它允许开发者创建能在各种小型设备上运行的应用程序,包括手机、智能手表、家用电器等。 【描述】中的“免费下载”意味着这个源代码是公开的,开发者或学习...
5. **泛型**:允许创建可重用的数据结构和方法,不依赖具体类型,提升代码灵活性。 6. **接口**:定义对象的行为规范,实现多态性。 7. **NuGet包管理**:可能利用了外部库,通过NuGet进行依赖管理。 压缩包中的...
它的核心功能是代码注入,这是一种技术手段,允许程序在运行时将代码注入到其他正在运行的进程,以便进行动态分析、调试或者实现某些特定功能。 代码注入在多种场景下被使用,比如软件逆向工程、安全测试以及恶意...
3. **选择或创建代码格式化配置**:你可以选择内置的代码风格,如“Oracle”,也可以创建自定义配置并保存为XML文件供团队共享。 4. **配置细节**:在代码格式化器中,你可以逐一配置各个选项,如缩进、换行、空格...
《C++实现的魔塔游戏源代码解析》 在编程世界中,游戏开发是一项充满挑战且有趣的工作。这里我们探讨的是一款使用C++语言编写的魔塔游戏源代码。魔塔游戏,作为一种策略型的固定数值 RPG 游戏,以其独特的逻辑和...
此外,函数(或称为"自制积木")允许创建自定义的代码块,提升代码的复用性和可读性。例如,可以定义一个"攻击"函数,包含主角攻击的动作和效果计算。 通过分析"打击网络恶魔"的源代码,孩子们不仅能了解游戏背后的...
【标题】"魔时网五屏焦点图代码Demo"是一个示例项目,它展示了如何实现一个跨平台的、多屏幕的焦点图效果。这个标题暗示了我们将会接触到一个与网页设计相关的技术,特别是关于图像展示和用户交互的部分。焦点图通常...
在Java编程领域,J2ME(Java 2 Micro Edition)是专为移动设备和嵌入式系统设计的一种轻量级开发平台。它允许开发者创建功能丰富的应用程序,如游戏、通讯工具等,能在各种具有Java支持的手机和手持设备上运行。本篇...
即使C语言允许,也应始终为控制语句和函数调用使用括号,即使只包含一个表达式,如:`if (条件) { 代码 }`,这有助于防止因语法错误引起的混淆。 7. **避免魔法数字** 魔法数字是指直接出现在代码中的未定义数值...
在IT行业中,"flash_魔法表情"涉及到的是利用Adobe Flash技术来创建动态、交互式的表情符号,这种技术常用于即时通讯软件如QQ中,为用户提供更丰富的沟通体验。魔法表情通常包含动画效果,使得表情更加生动有趣。接...
魔小灯可能是一款智能照明设备,具有可编程性和互动性,允许用户通过编写代码或使用特定的图形化界面来控制灯光效果、颜色变化和响应模式。这种设备通常适用于家庭自动化、艺术装置或者教育项目,提供了一种有趣且...