【发布时间】:2009-10-16 11:56:04
【问题描述】:
不使用运算符会使我的代码晦涩难懂。
(aNumber / aNother) * count
优于
aNumber.divideBy(aNother).times(count)
在 6 个月没有写一条评论后,我不得不对上面的简单操作写评论。通常我会重构,直到我不需要评论。这让我意识到,数学符号和数字比书面形式更容易阅读和理解。
例如
TWENTY_THOUSAND_THIRTEEN.plus(FORTY_TWO.times(TWO_HUNDERED_SIXTY_ONE))
比
更晦涩20013 + 42*261
那么你知道在Java中不使用运算符重载的情况下摆脱晦涩难懂的方法吗?
更新:我认为我对 cmets 的夸大不会给我带来这样的麻烦。我承认我需要在 6 个月内写几次评论。但总共不超过10行。很抱歉。
更新 2: 另一个例子:
budget.plus(bonusCoefficient.times(points))
比
更晦涩budget + bonusCoefficient * points
我不得不停下来思考第一个,第一眼看起来像是乱七八糟的词,另一方面,我第一眼就明白了第二个的意思,它非常清晰整洁。我知道这在 Java 中无法实现,但我想听听一些关于我的替代方案的想法。
【问题讨论】:
-
这不是关于运算符重载的问题(java 并不真正支持)。更多关于运算符与方法链接的问题...
-
“在 6 个月内没有写过一条评论”表明您遇到的问题比缺少运算符重载要大得多。
-
cmets 通常是不安全或糟糕的程序员的标志。 cmets 也会很快过时;尝试进行一或五次重构,然后告诉我这些 cmets 有多准确。但是,代码始终是最新的。
-
@geowa4(和@nimcap):我可以向你保证,我的 cmets 不是因为我不安全或在任何方面都不好,而是主要是因为在现实世界中你不能总是信任任何其他使用代码的人对事物的有效输入和预期输出同样聪明或同样了解。重构直到代码不需要 cmets 是主观的,因为不是每个人都会分享您对需求的看法。归根结底,写 cmets(在需要的地方)不是我为自己做的事情,更多的是对您的同行和追随者的礼貌,让他们的生活更轻松。
-
@geowa4 我同意那个博客,过多的评论是不好的。然而,没有评论更糟糕。此外,如果您使用继承,OO 编码几乎需要它。尝试在不阅读 javadocs 的情况下正确扩展核心 java 类。我保证你会有一个错误。
标签: java coding-style operators