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
総合スコア145183
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総合スコア36087
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/12 07:27