什么时候Java方法名称太长?

什么时候Java方法名称太长?,java,methods,Java,Methods,在过去的几周里,我看到一些人对一个方法或类使用了很长的名称(50个字符),这通常是在提高可读性的前提下进行的,我的观点是,像这样的长名称表明,如果我们需要这么长的名称,我们在一个方法类中尝试了很多或太多的工作,不过我想知道你们怎么看 例如: getNumberOfSkinCareEligibleItemsWithinTransaction 上下文“…WithinTransaction”应该是显而易见的。这就是面向对象的全部内容 该方法是类的一部分。如果类不是“Transaction”的意思——

在过去的几周里,我看到一些人对一个方法或类使用了很长的名称(50个字符),这通常是在提高可读性的前提下进行的,我的观点是,像这样的长名称表明,如果我们需要这么长的名称,我们在一个方法类中尝试了很多或太多的工作,不过我想知道你们怎么看

例如:

getNumberOfSkinCareEligibleItemsWithinTransaction
上下文“…WithinTransaction”应该是显而易见的。这就是面向对象的全部内容


该方法是类的一部分。如果类不是“Transaction”的意思——如果它不能使您不必一直说“WithinTransaction”,那么您就有问题了。

当存在一个同样传达方法行为的较短名称时,Java或任何其他语言中的名称太长

我的规则如下:如果一个名字太长,以至于它必须出现在自己的一行上,那么它就太长了。(实际上,这意味着我很少超过20个字符。)

这是基于研究表明,代码的可见垂直线的数量与编码速度/效率正相关。如果类/方法名称开始严重影响这一点,那么它们就太长了


在声明方法/类的地方添加一条注释,如果你想详细描述它的用途,让IDE带你去那里。

方法本身的长度可能是一个更好的指标,它是否做得太多了,即使这样也只能给你一个粗略的概念。你应该力求简洁,但描述更重要。如果你不能用一个较短的名字来表达相同的意思,那么这个名字本身可能也没问题

与任何其他语言一样:当它不再描述函数执行的单个操作时。

当标识符名称超过Java编译器可以处理的长度时,它太长。

Java有鼓励长名称的文化,可能是因为IDE具有良好的自动完成功能

表示JRE中最长的类名是
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState
,长92个字符


至于最长的方法名,我发现这一个
支持数据定义和数据操作事务
,它是52个字符。

只是为了改变一下,一个非主观的答案:65536个字符

A.java:1:UTF8表示字符串“xxxxxxxxxxxxxxxxxxxxxxxx…”太长 对于恒定池


;-)

减少方法名长度的一些技巧:

  • 如果你的整个课程、课程或模块都是关于“护肤品”的,你可以放弃护肤品。例如,如果您的类被称为
    SkinCareUtils
    , 这将带您进入
    getNumberOfEligibleItemsWithinTransaction

  • 您可以在中更改为,
    GetNumberOfEligibleItemsTransaction

  • 您可以将事务更改为Tx,这将使您进入
    getNumberOfEligibleItemsInTx

  • 或者,如果该方法接受类型为
    Transaction
    的参数,则可以完全删除InTx:
    getNumberOfEligibleItems

  • 您可以按计数更改numberOf:
    GetEligibleItemScont


  • 这是非常合理的。它缩短了60%。

    这里有两种方法或观点:一种是,方法名称的长度实际上并不重要,只要尽可能描述方法正在做什么(Java最佳实践基本规则)。另一方面,我同意flybywire邮报的观点。我们应该使用我们的智能尽量减少方法名称,但不减少其描述性。描述性更重要:)

    我倾向于用俳句规则来命名:

     Seven syllable class names 
     five for variables
     seven for method and other names
    
    以下是max名称的经验法则。只有当它提高可读性时,我才违反这一点。类似于RecreactEmortGageInterest(currentRate,quoteSet…)的东西比RecreactEmortGageInterestRate或RecreactEmortGageInterestFromSet要好,因为它涉及到速率和一组引号,这一事实在javadoc或.NET等嵌入式文档中应该非常清楚


    注意:不是真正的俳句,因为它是7-5-7而不是5-7-5。但我还是更喜欢称之为俳句。

    我想说的是,结合好的答案,并且要合理

    完整、清晰、易读地描述该方法的作用


    如果方法名称太长,请重构方法以减少工作量。

    如果名称太长:

    • 读取所需时间超过1秒
    • 占用的RAM比为JVM分配的要多
    • 是一个名字很荒谬的东西吗
    • 如果一个较短的名字很有意义
    • 如果它环绕在IDE中

    老实说,这个名称只需要向开发人员传达它的目的,开发人员将把它作为公共API方法使用,或者在您离开时必须维护代码。请记住KISS(保持简单愚蠢)

    当方法的名称换行到另一行时太长了,对方法的调用是行中唯一的内容,并且开始时非常接近边距。你必须考虑将要使用它的人的屏幕的平均大小


    但是!如果名字看起来太长,那么它可能太长了。解决这个问题的方法是以这样一种方式编写代码:您在一个上下文中,名称很短,但在其他上下文中重复。这就好比你可以用英语说“她”或“他”而不是某人的全名。

    当一个小单词可以用时,千万不要用长单词。

    我认为你的论点“方法名称的长度与方法的长度成正比”并不成立

    以您给出的示例为例:“getNumberOfSkinCareEligibleItemsWithinTransaction”。在我看来,这似乎只做了一件事:它计算一个事务中
    "The man who is going to maintain your code is a phyco who knows where you stay"
    
        @Test
        public void testDialogClosesDownWhenTheRedButtonIsPressedTwice() {
            ...
        }
    
    getTransaction().getItems(SKIN_CARE).getEligible().size()
    
    getTransaction().getItems().stream()
        .filter(item -> item.getType() == SKIN_CARE)
        .filter(item -> item.isEligible())
        .count();