0

ロジック全体が「この条件が真/偽の場合はこれを返し、そうでない場合はこれを返す」という行に沿った関数では、これがとる最善の、またはおそらく最も受け入れられている形式は何ですか? 私が見た3つの方法があるようです。

int function(bool foo){
    if(foo){
         return doSomething();
    }else{
         return somethingElse;
    }
}

これは最も理にかなっていますが、戻り値の型を持つ関数の戻り値の型をブランチに配置してはならないことを読んだことがあります。(なぜ、ソースは決して言わなかった)それで、これがあります:

int function(bool foo){
    if(foo){
         return doSomething();
    }
    return somethingElse;
}

これには分岐の外に戻り値の型がありますが、コードの意味の一部が取り除かれていると思います。また、if-else ブロックに利点があることも読みました。(それらが何であるか、情報源も言いませんでした)最後に、これがあります:

int function(bool foo){
    int result;
    if(foo){
         result = doSomething();
    }else{
         result = somethingElse;
    }
    return result;
}

意味はそこにあります。 return はブランチの外にありますが、機能に実際には必要のない変数とコードが追加されています。

私の質問は、これら 3 つの形式のどれ、または他の形式がある場合は、この流れで関数を記述するための最良の方法でしょうか?

4

1 に答える 1

2

良い質問。スタイル、読みやすさ、および同じコードをさまざまな方法で記述する根本的な理由について考えていることを示します。結局はあなた次第です。

番号 1 は問題なく、非常に明確です。

番号 2 は、エラー状態をテストするときに通常使用します。一番下まで到達したら、成功を返します。おまけに、明瞭さを失うことなく中括弧を削除できることがよくあります。

番号 3 は通常、複数の種類の戻り値が可能なループ内から結果を設定する場合、または戻り値が他の呼び出しから渡され、中間チェックが必要な場合に役立ちます。ああ、戻り値に依存しない一般的なクリーンアップを行う必要がある場合にも適しています。

単純なケースでは、通常は 3 番を実行しません。値を変数に格納する正当な理由が必要です。

ここには 4 番目のオプションがあると主張できます: クエリコロン演算子です。単純なクラス メンバーのインライン化が適切なスタイルだと考える場合に役立ちます =)

int function(bool foo) { return foo ? doSomething() : somethingElse; }

それは通常、あなたがそれを見るときなので、私はそれを一行で書きました.

于 2012-07-30T01:57:01.853 に答える