[解決済み] 4つのブール値があるケースに一致するかどうかをチェックするロジックを改善するには
2022-08-26 15:58:51
質問
私は4つの
bool
の値があります。
bool bValue1;
bool bValue2;
bool bValue3;
bool bValue4;
許容される値は
Scenario 1 | Scenario 2 | Scenario 3
bValue1: true | true | true
bValue2: true | true | false
bValue3: true | true | false
bValue4: true | false | false
ですから、例えばこのようなシナリオは受け入れられません。
bValue1: false
bValue2: true
bValue3: true
bValue4: true
今のところ、次のように考えています。
if
ステートメントで悪いシナリオを検出するようにしました。
if(((bValue4 && (!bValue3 || !bValue2 || !bValue1)) ||
((bValue3 && (!bValue2 || !bValue1)) ||
(bValue2 && !bValue1) ||
(!bValue1 && !bValue2 && !bValue3 && !bValue4))
{
// There is some error
}
この文のロジックは改善/簡略化できるのか?
どのように解決するのですか?
3つのシナリオがあるのだから、3つのifで処理すればいい。
bool valid = false;
if (bValue1 && bValue2 && bValue3 && bValue4)
valid = true; //scenario 1
else if (bValue1 && bValue2 && bValue3 && !bValue4)
valid = true; //scenario 2
else if (bValue1 && !bValue2 && !bValue3 && !bValue4)
valid = true; //scenario 3
読みやすく、デバッグしやすい、IMHO。また、変数に
whichScenario
を進めながら
if
.
最初の3つの値が真であれば、4番目の値をチェックしないようにすることができます。
エレガントな解決策ではありません
たぶん
確かにそうですが、この場合、簡単で読みやすいので大丈夫です。
ロジックがもっと複雑になったら、そのコードを捨てて、(Zladeckが提案しているように)異なる利用可能なシナリオを保存するためにもっと何かを使うことを検討してください。
で与えられた最初の提案が本当に好きです。 この回答 読みやすく、エラーが起こりにくく、保守しやすい。
(ほぼ)本題から外れますが。
私はStackOverflowであまり回答を書きません。上記の受理された回答が、私の歴史の中で圧倒的に最も評価された回答であることは本当に面白いことです (以前は 5-10 以上のアップヴォートを得たことはなかったと思います)。
しかし、シンプルであることはしばしば正しい方法であり、多くの人がそう考えているようで、私ももっとそう考えるべきです :)
関連
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] C++の規格では、初期化されていないboolがプログラムをクラッシュさせることは可能ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】==と!=は相互に依存しあっている?
-
[解決済み】「if」文が多すぎる?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】C++の余分な資格エラー
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] ブール→イント変換