2017-08-07 1 views
-4

あなたの名前、年齢、性別を印刷する簡単な方法は、1つのメインメソッドでコード化することです。なぜこれを行うには複数の方法を作らなければならないのですか?いつ新しい方法を使いますか?

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

私は、最良の答えは、ロバートマーティンの "クリーンコード"のコピーを取得し、それを読むことだと思います。なぜそれが良いアイデアなのかを説明する必要があります。このような非常に小さなメソッドでは、すべてを新しいメソッドに入れることは価値がないかもしれませんが、入るのは良い習慣です。 – ajb

答えて

1

は、なぜ私たちはこれを行うための複数の方法をしなければならないのですか?

実際には、すべてに持っていけない、しかし、モジュールは、キー(divide et imperaルールを覚えている)あなたのコードが破壊される問題外と後者それらのいずれかの方法を変更するには、次のことができ/必要です。..あなたはこれらの3つの方法を持っている場合。

その後、あなたは常にすべての誰もがちょうど3つの文字列を印刷する方法を作るためにあなたを強制しない第一の

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

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

のようなエレガントな解決策を行うことができます。

が好ましい。このタスクを1000回実行する必要がある場合のシナリオを考えてみましょう。 printステートメントを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); 
} 
明らか

それはわずか3行で構成さているため、実施例2は、読み取りおよびを理解しやすくなるであろうと異なるため責任はさまざまな方法にカプセル化されています。上記メソッドの実際の実装を知らなくても、メソッドのシーケンスを見るだけで、メインが何をするのかを理解することができます。例1では、理解するためにコードの各行を辿る必要があります。

また、あなたのコードにいくつかの新機能を追加することを検討:Aの新しいインスタンスを設定した場合には今

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); 
} 

を、我々はすべてが容易になり、単にリユース方法setupA()することができます。それ以外の場合は、100行全体を再設定してAを設定する必要があります。

これには別の大きな利点があります。コード内のいくつかの行を変更する必要がある場合は、(コードが発生するすべての場所ではなくメソッド内に1回)で変更するだけで済みます。オーバーライト、コピー貼りエラー、およびそうです。

関連する問題