電子書籍の厳選無料作品が豊富!

もし変数a が 1か2ならif内を実行
という式を書くときに

前略
if( a == 1 || a == 2){}
と書きますが、これを

if( a == 1 || 2 ){}
または
if( a == (1 || 2)){}
と書いた場合、どういう意味になりますか?

A 回答 (3件)

|| 演算子の定義をみれば一発だと思いますが



>if( a == 1 || 2 ){}

常にifの中が実行される。条件の評価は

a==1 がtrueならtrue
a==1 がfaleなら2

いずれも truthy なので、true と判断されます。


>if( a == (1 || 2)){}

a==1がtrueならifの中が実行されます。
a==1がいつtrue になるかはまた別の話。

うちのプロジェクトでは

a===1と書かないとコードレビューで
弾かれるでしょう(^^;
    • good
    • 0

こんばんは。



既に回答がでていますが、若干の補足を。

条件式の評価は、通常の四則演算と同様に優先順位に基づいて評価されます。
ご提示の式に関係のあるもので言えば、
 ( )内> 比較演算子 > 論理演算子
の順になります。
https://developer.mozilla.org/ja/docs/Web/JavaSc …

>if( a == 1 || 2 )
計算順序をわかりやすくするなら、
 (a == 1) || 2
の順に評価されるので、( )内の結果にかかわらず、常にtrueと評価されるはずです。

>if( a == (1 || 2))
 a == (1 || 2)
の右側の( )内は常に1になるので、結果的に
 a == 1
と等価となるはずです。
    • good
    • 0

ほう、そんなことしたことないな、と思ってやってみました。



if( a == 1 || 2 ){}
左の比較式(a == 1)がtrueになるとtrue、falseになると右辺の数値(ここでは2)
1が返ろうが2が返ろうが、0以外が返ればそれはtrue。
0が返ればfalseだけど、右辺を0と記すならば、そもそもそんな記述いらないと思う。

if( a == (1 || 2)){}
(1 || 2)のように数値同士にor演算子を行うと、
左辺が0以外の場合は必ず左辺の値(ここでは1)を返却する。
 - 左辺が0の時は必ず右辺を返却する。
 - 左辺も右辺も0の時は0を返却する。
この時、a = 1であれば、 1 == 1でtrue、a = 2であれば、 2 == 1でfalse

まぁ、真っ当な処理とは思えないし、使うことはないかな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!