2009-04-02 9 views
3

可能性の重複:仲間のプログラマは、なぜ私たちは常にメソッドの最後に返す必要があります私に尋ねた
Should a function have only one return statement?は、なぜそれが良い練習がメソッドの最後に返すことです

私たちは両方とも、メソッド内に常に1つのreturn文しか持たず、コード全体に分散していないことを教えられました。

これにはどのような理由がありますか?

答えて

18

1つの入力ポイントと1つの終了ポイントが必要であるとの考えの学校があります。もしあなたがより多くを持っているなら、コードをより明確にするためにリファクタリングするべきです。

は、私もその考えに加入し、頻繁にこのように、ガード句を使用しないでください。

public void DoSomethingOnMales(Person p) 
{ 
    if (p.Sex != Sex.Male) 
     return; 
    .... 
} 

もちろん、あなたがまだそれらのあまりに多くて、リターンの数を制限しようとする必要があり、あなた自身が悪いことではありませんが、複雑な方法があり、おそらくそれを単純化しようとするべきであるという良い兆候です。

+0

親指のルールが良いので、+1してください。私の意見では、関数の最後のリターンはデフォルトのケースに過ぎず、関数の型によっては、早いリターンがエラー(あなたのガード条件のように)か、早期成功(つまり何かを探している)。 – OregonGhost

1

いつでも戻ってくることができますが、方法の最後に戻る必要はありません。注意すべき唯一のことは、到達できないコードがないことです。コードに到達する前にいつもあなたが戻ってくるため、決して到達しないコードです。

あなたが混乱する可能性があり、方法の終了前に戻って、間違いを引き起こす可能性があると心配している場合は、回避してください。しかし、便利なことがあるので、いつでもどこでも返信文を使用することを躊躇しません。

+1

現代のコンパイラでは、到達不能なコードがあれば心配する必要はありません。なぜなら、コンパイラはあなたに(少なくともC#コンパイラを)教えてくれるからです。 – OregonGhost

+0

Resharperは入れ子に比べて複数のリターンを好むようです。たとえば、値を返すIF文、またはnullが返されるIFに変換されます。その値を持つIFステートメント外の別の戻り値を返します。 –

関連する問題