【问题标题】:Java Average Length of Constructor [closed]Java构造函数的平均长度[关闭]
【发布时间】:2013-11-17 11:40:56
【问题描述】:

很抱歉在这里发布了一个相当模糊的问题 - 但我一直在努力寻找这个问题的明确答案 - 也许没有,但只是想问问其他开发人员。

上周,我的一位同事提到构造函数的长度(在 Java 和一般的 OOP 中)应该保持在最低限度。虽然我总体上同意这种方法,但他继续说应该只有几行 - 最多 3-4 行。

我不确定他是如何得出这个数字的,我想知道这种方法有多大用处。如果您要执行一些复杂的初始化,您的构造函数将超过该限制。 您可以将代码拆分、分解和重构为更小的函数,直到奶牛回家,我更喜欢将相关代码保留在一个方法中,并避免不必要的函数,因为它使代码更具可读性。 这有时会导致构造函数的大小相当适中 - 在最坏的情况下只有 50-100 行代码,但即使我将其分解为函数,从技术上讲,该代码仍然“作为初始化的一部分调用” .那么,100 行代码可能会被一个函数调用替换,但是当您调用该函数时,这 100 行代码仍然会被调用吗? 我还查看了检查类型默认定义,它的默认构造函数长度设置为 150,这听起来“比几行代码”更合理。

很想知道你们遵循什么作为经验法则,或者是否确实存在这样的限制。

【问题讨论】:

  • 这是一个固有的主观问题。
  • 构造函数告诉你初始化对象的状态,保持简短(并将长行拆分为方法)使这更容易。
  • 嗨,programmers.stackexchange.com 是问这些问题的更好地方。一般来说,对于构造函数(对我而言)来说,100 行似乎有点多。但无论如何,我发现划分方法更具可读性,事实上,如果方法命名良好并且按预期工作,它们就会成为初始化的摘要。

标签: java oop constructor coding-style


【解决方案1】:

良好的经验法则是任何方法(或构造函数)都应该适合 IDE 中的一个屏幕,因此当您尝试阅读和理解该方法的作用时不必向下滚动(因此它提高了可读性)。

没有什么可以阻止你不时地抛出异常,但你通常应该将非常长的方法拆分成更小的块,因为我真的见过几百行长的方法,当我不得不更改代码时真的让我哭了。

【讨论】:

    【解决方案2】:

    这只是一种常见的做法,但不是什么。我已经制作了在构造函数中有很多代码的类。我也有没有构造函数的类。如上所述,构造函数中不应该包含大量代码,JVM也会加载它们。

    那么为什么会出现这个概念呢?这是因为人们认为构造函数用于初始化对象中的变量,因为它们仅在创建新实例时才被调用。同样在构造函数中做大量工作对使用 OOP 原则毫无意义。 OOP 本身的意思是'面向对象的编程',它意味着将代码构造为对象。所以我把结论留给你。查看这两个示例并思考哪个更好。

    示例 1:

    public Dog(String name)
    {
        System.out.println("Dog " + name + ": Bark!Bark!");
    }
    

    示例 2:

    public Dog(String name)
    {
        this.name = name;
    }
    
    public void bark()
    {
        System.out.println("Dog " + name + ": Bark!Bark!");
    }
    

    在第一个示例中,狗只叫一次,但在第二个示例中,您可以根据需要让狗叫多少次。出于同样的原因,他们说构造函数只能用于初始化值。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我一直在努力寻找一个明确的答案 - 也许没有

      你是对的。没有一个确定的答案。这是主观的。

      很想知道你们遵循的经验法则......

      我没有。我根据具体情况使用我的判断。主观上。

      ...或者如果确实存在这样的限制。

      没有。您不会在主流 Java 编码标准中找到任何指定的限制。一个体面的编码标准不会对此做出规定,因为它会适得其反。

      另一方面,在这种情况下,代码审查可能是有益的。如果您看到“过长”的构造函数或方法,值得指出,尤其是如果有很好的重构可用;即你的同事会同意的一种提高可读性的方法。

      【讨论】:

        猜你喜欢
        • 2018-05-06
        • 2013-08-26
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 2020-06-04
        相关资源
        最近更新 更多