[解決済み] if文を反転させて入れ子を減らす
2022-02-27 15:25:01
質問
を実行すると ReSharper を私のコードに適用した場合、例えば
if (some condition)
{
Some code...
}
ReSharperは上記の警告(Invert "if" statement to reduce nesting)を出し、以下の修正を提案してくれました。
if (!some condition) return;
Some code...
なぜその方がいいのか、理解したいです。メソッドの途中で "return" を使うのは、どこか "goto" のように問題があるとずっと思っていたのです。
どのように解決するのですか?
メソッドの途中でリターンすることは、必ずしも悪いことではありません。コードの意図が明確になるのであれば、すぐにreturnした方がよいかもしれません。例えば
double getPayAmount() {
double result;
if (_isDead) result = deadAmount();
else {
if (_isSeparated) result = separatedAmount();
else {
if (_isRetired) result = retiredAmount();
else result = normalPayAmount();
};
}
return result;
};
この場合、もし
_isDead
が真であれば、すぐにこのメソッドから抜け出すことができます。代わりにこのように構成した方がいいかもしれません。
double getPayAmount() {
if (_isDead) return deadAmount();
if (_isSeparated) return separatedAmount();
if (_isRetired) return retiredAmount();
return normalPayAmount();
};
このコードは リファクタリングカタログ . この具体的なリファクタリングはというと ネストされた条件式をガード節に置き換える。
関連
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] switch文の複数ケース
-
[解決済み】非同期プログラミングとマルチスレッドの違いは何ですか?
-
[解決済み] この呼び出しが待機されていないことを警告し、現在のメソッドの実行を継続します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] if ... elseのif構文をelse節で終了させるメリットは何ですか?