在过去的几周我已经看到了一些人使用很长的名字一个方法或类(50个字符),这通常是它提高了可读性的前提下,我的看法是,一个长的名字一样,这是一个指标,我们是如果我们需要这么长的名字,试图在方法类中做很多或者太多,但是我想知道你们对它的看法.
一个例子是:
getNumberOfSkinCareEligibleItemsWithinTransaction
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 390
当存在同样表达方法行为的较短名称时,Java或任何其他语言中的名称太长.
fly*_*ire 201
一些减少方法名称长度的技巧:
如果您的整个计划,课程或模块是关于'护肤品',您可以放弃护肤.例如,如果您的类被调用SkinCareUtils,那么就会带您前往getNumberOfEligibleItemsWithinTransaction
你可以改变内到中,getNumberOfEligibleItemsInTransaction
您可以将事务更改为Tx,这可以帮助您getNumberOfEligibleItemsInTx.
或者,如果方法接受类型的参数,则Transaction可以完全删除InTx:getNumberOfEligibleItems
您可以通过计数更改numberOf: getEligibleItemsCount
现在这是非常合理的.它缩短了60%.
Mar*_*ers 181
只是为了改变,一个非主观的答案:65536个字符.
A.java:1:字符串"xxxxxxxxxxxxxxxxxxxx ..."的UTF8表示对于常量池太长
;-)
Epa*_*aga 41
我同意所有人的意见:方法名称不应该太长.我确实想添加一个例外:
但是,JUnit测试方法的名称可能很长,应该类似于句子.
为什么?
例:
@Test
public void testDialogClosesDownWhenTheRedButtonIsPressedTwice() {
...
}
Run Code Online (Sandbox Code Playgroud)
有关此想法的更多信息,请参阅" 行为驱动设计 ".
S.L*_*ott 17
上下文"......内部交易"应该是显而易见的.这就是面向对象的全部意义所在.
该方法是类的一部分.如果这个课程并不意味着"交易" - 并且如果它不能让你不必一直说"内部交易",那么你就会遇到问题.
sal*_*sal 12
我倾向于使用ha句规则来命名:
Seven syllable class names
five for variables
seven for method and other names
Run Code Online (Sandbox Code Playgroud)
这些是最大名称的经验法则.我只有在提高可读性时才会违反此规定.像recalculateMortgageInterest(currentRate,quoteSet ...)这样的东西比recalculateMortgageInterestRate或recalculateMortgageInterestRateFromSet更好,因为它涉及的速率和一组引号应该从嵌入式文档(如javadoc或.NET等价物)中非常清楚.
注意:不是真正的ha句,因为它是7-5-7而不是5-7-5.但我还是喜欢称它为ha句.
当一个小人物会做的时候,千万不要用长话.
我不认为你的论文"方法名称的长度与方法的长度成正比"确实有用.
举个例子:"getNumberOfSkinCareEligibleItemsWithinTransaction".这听起来像是它只做一件事:它计算交易中属于特定类别的项目数.当然,如果没有看到该方法的实际代码,我无法判断,但这听起来对我来说是一个好方法.
另一方面,我已经看到很多方法都有非常简短的名称,可以用来做很多工作,比如"processSale"或者流行的"doStuff".
我认为给出一个关于方法名称长度的强硬规则是很难的,但目标应该是:足够长的时间来传达函数的功能,足够短以便可读.在这个例子中,我认为"getSkinCareCount"可能已经足够了.问题是你需要区分什么.如果您有一个功能可以计算交易中符合护肤条件的物品,而另一个功能可以计算符合皮肤护理条件的物品,那么"内部交易"会增加价值.但如果在交易之外谈论这些项目并不意味着什么,那么就没有必要用这些多余的信息来捏造这个名称.
第二,我认为假设任何可管理长度的名称将告诉你除了最琐碎的案例之外的所有函数的确切含义,这是非常不现实的.一个现实的目标是创建一个名称,为读者提供线索,以后可以记住.就像,如果我试图找到计算我们需要消耗多少反物质以达到翘曲速度的代码,如果我查看函数名称并查看"calibrateTransporter","firePhasers"和"calcAntimatterBurn",很明显前两个不是它,但第三个可能是.如果我检查并发现那确实是我正在寻找的那个,那么很容易记住,当我明天回来再研究这个问题时.那太好了.
三个相似的长名称比短名称更令人困惑.如果我有两个名为"calcSalesmanPay"和"calcGeekPay"的函数,我可以快速猜一眼哪个.但如果他们被称为"calculateMonthlyCheckAmountForSalesmanForExportToAccountingSystemAndReconciliation"和"calculateMonthlyCheckAmountForProgrammersForExportToAccountingSystemAndReconciliation",我必须研究名称,看看哪个是哪个.在这种情况下,名称中的额外信息可能会适得其反.它将半秒钟的思考变成了30秒的思考.
按照您希望的方式设计您的界面,并使实现匹配.
例如,也许我会把它写成
getTransaction().getItems(SKIN_CARE).getEligible().size()
Run Code Online (Sandbox Code Playgroud)
或者使用Java 8流:
getTransaction().getItems().stream()
.filter(item -> item.getType() == SKIN_CARE)
.filter(item -> item.isEligible())
.count();
Run Code Online (Sandbox Code Playgroud)
我的规则如下:如果一个名字太长,以至于它必须出现在它自己的一行上,那么它太长了.(实际上,这意味着我很少超过20个字符.)
这是基于研究表明可见垂直代码行的数量与编码速度/有效性正相关.如果类/方法名称开始显着损害它,它们太长了.
在声明方法/类的位置添加注释,如果需要对其进行详细描述,请让IDE将其带到那里.
方法本身的长度可能更好地指示了它是否做得太多,即使这样也只能给您一个大概的想法。您应该为简洁而努力,但描述性更重要。如果您不能用较短的名称传达相同的含义,则名称本身可能还可以。