2016-10-13 4 views
2

場合によっては、初期のreturn文を使用してif文のネストを防ぐことができます。if-elseまたはearly return

私は、次のパターンのどちらがより良い方法であるかの2つの客観的または圧倒的な一般的合意があるのだろうかと思いますか?私はこれが主観的な質問ではないと思う。私が本当に求めているのは、近くに客観的な好みがあるからだ。

void func() { 
    if (a) { 
     do b 
    }  
    else { 
     do c 
    } 
} 

または

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 
+0

私は、可能であれば、可能であれば、リターンステートメントは、読みやすく、理解しやすいため、関数の最後に使用することに限定しておかなければなりませんでした流れ。他の人はそれに同意しないかもしれませんが、それが私が最初のスニペットを選ぶ理由です。 – b85411

+0

私はこれと非常に似ていると思うhttp://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement – hakim

答えて

1

最初の方が良いです。簡単に言えば、条件が偽であるため、別の開発者がcコンパイルを理解するのに役立ちます。また、他の人がコードに悪影響を与えるのを防ぎます。つまり、両方とも正確であり、両方ともうまく動作するでしょう。

1

私は、最初のバージョンを選ぶでしょう。私は実際にこれについて数年前に長い説明を与えられました。

あなたが書いた2つの例は、機能的には同じです。 aの条件が真であれば、最初のifのロジックが実行され、関数が戻ります。しかし、第2のシナリオをよく見てい:最初if火は、関数が返す必要があり、今のところ

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 

を、そうでない場合はcが実行されます。しかし、プログラマが何らかの理由でメソッドをリファクタリングすることを決定すると、ある時点では、その行の下にあると考えてください。 returnステートメントを取り出す場合、cのロジックは、aがtrueの場合にのロジックが実行されます。これは遠くに見えるかもしれませんが、思うよりも簡単に起こります。一方、完全なif-elseを使用すると、ifのリファクタであっても、同時に論理が評価されることはありません。c