[解決済み] if文 - 短絡的な評価と可読性の比較
2023-03-18 15:39:30
質問
時々
if
文はかなり複雑で長いので、可読性を高めるために、複雑な呼び出しを
if
.
例:これ
if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall())
{
// do stuff
}
をこのように
bool b1 = SomeComplicatedFunctionCall();
bool b2 = OtherComplicatedFunctionCall();
if (b1 || b2)
{
//do stuff
}
(提供された例は その が悪いわけではなく、単に説明のためのものです。複数の引数を持つ他の呼び出しを想像してみてください。)
しかし、この抽出で私は短絡評価 (SCE) を失いました。
- 本当に毎回 SCE が失われるのでしょうか。コンパイラーが "最適化"して、まだ SCE を提供できるようなシナリオはあるのでしょうか?
- SCE を失うことなく、2 番目のスニペットの改善された可読性を維持する方法はありますか?
どのように解決するのですか?
自然な解決方法として、次のようなものがあります。
bool b1 = SomeCondition();
bool b2 = b1 || SomeOtherCondition();
bool b3 = b2 || SomeThirdCondition();
// any other condition
bool bn = bn_1 || SomeFinalCondition();
if (bn)
{
// do stuff
}
これは、理解しやすい、あらゆるケースに適用できる、短絡的な動作をするなどの利点があります。
これは私の最初の解決策でした。 メソッド呼び出しとforループ本体の良いパターンは以下の通りです。
if (!SomeComplicatedFunctionCall())
return; // or continue
if (!SomeOtherComplicatedFunctionCall())
return; // or continue
// do stuff
短絡的な回路評価による素晴らしいパフォーマンス上の利点はそのままに、より読みやすいコードになります。
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] Pythonはショートカットに対応していますか?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] SQLのWHERE句は短絡的に評価されるか?
-
[解決済み] JavaScriptには "Short-circuit "評価があるのか?
最新
-
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++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。