スタック・オーバーフロー Asked by Y S on September 1, 2021
if ( flg != false)
と
if ( flg == true )
で条件分岐させた場合、その後の処理において何か違いがありますか?
個人的には "not equal ~" の方が分かりにくいけど、記法としてカッコいいのかなぁ
と、ぼんやり考えています。
そうではなく、具体的な違いをご存じでしたらどなたか教えてください。
よろしくお願いいたします。
こんにちは。
この場合は可読性を考慮して (flg == true) か (flg) と措くのがよいでしょう。
flgが真である場合 ですね。
flgが偽でない場合 という表現は、
それまでの文脈として自然な場合は、後者を選択することもあるかもしれませんが、
あまりないと思います。人が読むものなので文章として自然かというのは大切です。
少なくとも記法としてカッコいいかというのはあまり気にしません、
というか見た目より複雑なので気にする心の余裕が私にはありません:-)
たとえば、以下のケースでは記法により、条件の判断内容が変化してきます。
具体的な違いという点で言えば、コンパイル言語では生成されるバイトコードに変化が起こります。
ただしこれはまあ、あまり気にする必要はないんではないでしょうか。
Correct answer by Kouki.W on September 1, 2021
言語を指定していませんが、flgは真か偽かないという想定ですかね
SQLのNULLのように、真とも偽とも異なる条件式も考えられるのですが
Answered by user15092 on September 1, 2021
言語によっては、false は0、trueは1、となってるものもあります
その時、flg に2が入っていたとき、そのそれぞれでどういう判断になるか考えてみましょう
Answered by y_waiwai on September 1, 2021
質問タグにはありませんが c / c++ の場合は if (flg)
一択で、次点で if (flg != FALSE)
そして、絶対に使ってはいけないのが if (flg == TRUE)
ですね。
a>b
等) の結果は false
または true
(c++ の場合)a>b
等) の結果は 0
または 1
(c の場合)#define FALSE 0
および #define TRUE 1
が多いif
等の条件判定においては 0
false
FALSE
は俗にいう else
側if
等の条件判定においては 0
false
FALSE
以外は俗にいう then
側(ここが超重要)となっています。ということは int flg;
があるとき if (flg == TRUE)
と書いてしまうと
if (flg == 1)
と置換されるif (flg)
であれば flg
の値が 2
でも -42
でも then
側if (flg == 1)
であれば flg
の値が 1
以外は else
側となってしまい挙動が変わってしまいます。余計なことを書いたせいで挙動が変わる=バグを引き込んでしまいます。
もし仮に bool flg;
であったとして if (flg == true)
と書かなきゃ気が済まない人がいるなら
if ((flg == true) == true)
と書かないのはなぜ?if (((flg == true) == true) == true)
と書かないのはなぜ?if ((((flg == true) == true) == true) == true)
以下略と話が進んでいくわけで、やっぱり「一番簡単な形式が一番理解しやすい」のであろうと思われます。
んで今どきは flg
のような
flag
のほうがまだましということになっている、すなわち bool input_fulfilled;
のようにもっと具体的な名前をつけなさいと言われています。たとえサンプルでも、もうちょっと名前付けを考えたほうがいいでしょう。サンプルであることを明示したいならメタ変数名を使うべきだったかもしれません。
Answered by 774RR on September 1, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP