if(flg == true){
(trueの場合の処理)
}
とJavaでは上記のように書くのは良くないというふうなことを聞きました。
本当でしょうか。
またPHPやJavascriptも同じことが言えるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答5件
0
ベストアンサー
Javaの場合、if文のカッコ内にはtrueあるいはfalseを取る条件式しか置けませんので、==trueと比較してコンパイルが通るようなboolean型の変数であれば、カッコ内にそのまま置いても動作は全く同じですし、逆にそうでなければ型の一致しない比較になってコンパイルが通りませんので、付ける意味はゼロです。
JavaScriptやPHPの場合は正反対に、if()のカッコ内にはなんでも置けますが、これらの言語ではif($a)とif($a==true)で意味が違ってきますし、==では曖昧な比較になるので、逆の意味で注意が必要です(厳密にtrueかどうかを調べる必要がある場合、if($a===true)とすればそう動きます)。
投稿2015/02/12 05:59
総合スコア147001
0
他の言語は分かりませんが、javascriptではこんなことが起きます。
lang
1function test(flg){ 2 if(flg == true){ alert(flg.toSource() + ' is true !') } 3} 4test(true); //"(new Boolean(true)) is true !" 5test(1); //"(new Number(1)) is true !" 6test('1'); //"(new String("1")) is true !" 7test([1]); //"[1] is true !"
比較演算子 === を使うことによって型を含めた厳密な比較をしてくれます。
投稿2015/02/12 05:57
編集2015/02/12 05:58総合スコア37683
0
if()構文自体が、真偽値を問う構文ですので、以下の場合は、そもそも比較する必要もなくtrue/falseです。
lang
1var hoge = true; 2if (hoge) { 3 // true 4} 5if (!hoge) { 6 // false 7}
これを以下のようにすることで、無駄な比較が行われます。
lang
1var hoge = true; 2if (hoge == true) { 3 // true 4} 5if (hoge == false) { 6 // false 7}
これは他の言語でも同じです。
ただし、他の方の回答にもある通り、===演算子を利用することで厳密な比較を行います。
これも、JavaScript、PHPともに同じような意味合いを持ちます。
厳密に比較する必要がある時を除いて、わざわざ比較する必要はありません。
例えばJavaScriptでいえば、以下のような場合が問題視されるでしょう。(PHPも似た感じだったはず)
こういう、文字と数値が混合してたり、選択されてない場合は空白値、とかってのは時々ありますよね。
lang
1test(""); // false 2test(0); // false 3test("0"); // true 4test(1); // true 5test("1"); // true 6 7function test(value) { 8 if (value) { 9 alert("true"); 10 } else { 11 alert("false"); 12 } 13}
投稿2015/02/12 08:53
総合スコア130
0
if(flg == true)と書くときに、下のように書き間違えてしまう可能性があるためif(flg)と書いたほうがよいという解説を読んだことがあります。
lang
1// この場合flgにtrueが代入された後、()内が評価される。 2// このため、常にtrueの場合の処理が実行されてしまう 3if(flg = true){ 4 (trueの場合の処理) 5}
投稿2015/02/12 08:04
総合スコア3541
0
既に回答頂いている他に、質問文にあるような記述が良くない理由としてよく挙げられるのが
if (flg == true)のような比較を書く際に、間違えて
if (flg = true)と書いてしまうことがあるということですね。
この場合、代入文になってしまうため、意図しない動作になる可能性が高いです。
これを防ぐため、if (true == flg)というように、
比較演算子の前後を入れ替える記述が推奨されている場合もあるようです。
参考まで
投稿2015/02/12 08:02
総合スコア1679
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2015/02/12 07:27