2016-04-11 7 views
5

だから、私は私のデータ構造クラスの割り当てのためのいくつかのコードを書いている、と方法を使用している場合、私は思っていた別のメソッドに値を戻しますが、一般的に悪い習慣ですメソッドが別のメソッドの中に文字列を返すようにするのは悪い習慣ですか?

public void PrintLocation(MarsLander ml) 
{ 
    for (int i = 10; i >= 0 ; i--) 
    { 
     Console.Write("{0} m: {1}", i * 100, WheresTheSpaceship(ml, i)); 
    } 

    Console.WriteLine(); 
} 

public string WheresTheSpaceship(MarsLander ml, int i) 
{ 
    if (i == ((ml.GetHeight() % 100) + 9)) 
    { 
     return " * \n"; 
    } 
    else 
    { 
     return "\n"; 
    } 
} 

WheresTheSpaceship方法はかどうかを返す必要があります次の行にインデントされたばかりの宇宙船(*)の位置を出力し、PrintLocationメソッドに戻り、ループを繰り返します。 (これは私の最初の質問は私には簡単に行ってください:))

+3

これは常に行われますが、良いメソッド名ではありません。 –

+1

これは大丈夫です。なぜなら、すべてのものを1つのメソッドに入れるのは悪い習慣であるからです。これにより、コードがより疎結合になります。 –

+0

着陸者のためにただ一回呼び出される 'GetRoundedLocation'という呼出しを持っていて、すべての印刷コードを計算コードとは別に保つことができます。書かれているように、ランダーの場所が別のスレッドで更新されていれば、動作しません。 –

答えて

0

それは必要であれば悪くないです。それは他人によってさえ練習される。たとえば、コードのメソッド名を変更するだけです。例:GetSpaceshipLocation(MarsLander ml, int i)

1

一般的に、メソッドを短くし、特定の目的を持つようにするのが良い方法です。そうしないと誤用される可能性があります。 (あなたの方法は、場所を印刷して出力をフォーマットするかどうかを決定します)。
方法は、それがために意図されたものを返す必要があります:あなたは場所を印刷する必要があるかどうかをお尋ねしたい場合は、より適切な方法は、次のようになります。

public bool ShouldPrintLocation(MarsLander ml, int i) 
{ 
    return (i == ((ml.GetHeight() % 100) + 9); 
} 

PrintLocation()ことが必要であるならば、実際の場所を印刷します。

public void PrintLocation(MarsLander ml) 
{ 
    for (int i = 10; i >= 0 ; i--) 
    { 
     string locationText = ShouldPrintLocation(ml, i) ? "*" : string.Empty; 
     Console.WriteLine("{0} m: {1}", i * 100, locationText); 
    } 

    Console.WriteLine(); 
} 

私には、この方法は、いくつかのロジック/計算を行っているとは対照的に、..場所を表示することを意図しているように、出力がPrintLocationに書式設定しているために、より理にかなって

関連する問題