2017-08-07 98 views
-4

打印姓名,年龄和性别的简单方法是用一种主要方法对其进行编码。为什么我们不得不采取多种方法来做到这一点?你什么时候使用新方法?

public static void main(String[] args) { 
    sayMaster(); 
    Age(); 
    Gender(); 
} 

static void sayMaster() { 
    System.out.println("Hello Master Austin"); 
} 

static void Age() { 
    System.out.println(7); 
} 

static void Gender() { 
    System.out.println("Robot"); 
} 
+1

谁说你必须? –

+0

您应该问问编写该代码的人。 –

+0

我认为最好的答案是获得Robert Martin的“Clean Code”的副本并阅读它。这应该解释为什么这是一个好主意。对于这样的非常小的方法,将所有内容都放入新方法可能并不值得,但这是一个很好的习惯。 – ajb

回答

1

为什么我们一定要多种方法来做到这一点?

其实你不必在所有,但模块化是关键(记得divide et impera规则),你可以/需要改变后者这些方法出了问题,你的代码将被打破的.. 。

那么当你拥有了这些3种方法,你总是可以做到像

public static void main(String[] args) { 
    invokeThemAll(); 
} 

public static void invokeThemAll() { 
    sayMaster(); 
    printAge(); 
    printGender(); 
} 
0

首先没人逼你做的方法只是打印3串一个完美的解决方案。

制作方法是优选的。考虑这种情况,当你不得不做1000次这个任务。您不需要写1000次打印语句,只需调用方法并发送一个参数,剩下的工作只需3行代码即可完成。

0

考虑一下:

在其中的例子你能马上告诉什么代码是应该做的?

实施例1

public static void main(String... args) { 
    A a = new A(); 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // ... 100 lines of setting up A 
    B b = new B(a); 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // ... 100 lines of setting up B 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // ... 500 other lines of code using a and b 
} 

实施例2

public static A setupA() { 
    A a = new A(); 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // ... 100 lines of setting up A 
    return a; 
} 

public static B setupB() { 
    B b = new B(); 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // ... 100 lines of setting up B 
    return b; 
} 

public static void doFancyAlgorithm(A a, B b) { 
    // CODE 
    // CODE 
    // CODE 
    // CODE 
    // 500 other lines of code using a and b 
} 

public static void main(String... args) { 
    A a = setupA(); 
    B b = setupB(); 
    doFancyAlgorithm(a, b); 
} 

显然,实施例2将是更容易阅读和理解,因为它由只有3条线和因为不同的责任被封装成不同的方法。通过查看方法序列,您将能够理解主要功能的作用,而无需了解所述方法的实际执行情况。而在示例1中,您需要遍历每行代码才能理解。

此外,还应考虑增加了一些新的功能,以您的代码:

public static void main(String... args) { 
    A a = setupA(); 
    B b = setupB(); 
    doFancyAlgorithm(a, b); 

    A a2 = setupA(); // new instance of a because we absolutely need that 
    C c = setupC(); 
    doAnotherAlgorithm(a2, c); 
} 

现在设立的A一个新实例的情况下,我们可以简单重用这让一切更容易的方法setupA()。否则,我们需要重新编写整个100行的设置A.

这有另一个巨大的好处。如果您需要更改代码中的某些行,则只需将其更改为一个位置(即一次进入方法而不是代码发生的任何位置),这样可以防止疏忽,复制粘贴错误和等等。