• ベストアンサー

&&はかつ、andのことですよね。

http://okwave.jp/qa/q9284426.html の続き 下記の疑問が残っているので再質問しました。1はおそらく問題ないと思いますが、2がよくわかりません? &&はかつ、andのことですよね。 if (x === 1) { console.log('こんにちは'); } ← ❶ もしxが数値の1だったらこんにちはと出す。 x ===1 && console.log('こんにちは'); ← ❷ xが数値の1かつ、こんにちだったら?? &&はかつ、andの意味と聞いていますが、この場合もこの意味でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

>なぜ条件式以外で使うかがよく理解できません。 実は「演算子は、式が書ける場所なら、どこで、どう使っても良い」のです。例えそれが「無意味」だとしても。 例えば、以下の例を見て下さい。 例❶ int x = 1; if (x === 1) { console.log('こんにちは'); } 次に、以下の例を見て下さい。 例❷ int x = 1; boolean b; b = x === 1; if (b) { console.log('こんにちは'); } 判定結果を、一旦、変数bに入れて、変数bの値がtrueかfalseかを、if文で判定しています。 どちらも「ifの条件式」には「trueかfalseになる式を書いている」のです。 例❷では「===演算子」を「if文の条件式以外の場所」で使っています。「変数bへの代入文の、代入する値の所」で使っています。 同様に、&&演算子も「if文の条件式以外の場所」で使って構わないのです。 例えば 例❸ int x = 1; int y = 2; boolean b; b = x === 1 && y === 2; if (b) { console.log('こんにちは'); } のように、代入文の「代入する値」の所で使っても構いません。 このように「論理演算子の&&や||は、if文の条件式以外の場所でも使用可能」なのです。 上記を踏まえて、以下の2つの例を見て下さい(計算だけして、出力も何もしない、無意味なプログラムです) 例❹ int x = 1; int y = 2; boolean b; b = x === 1 && y === 2; 例❺ int x = 1; int y = 2; int b; b = x + y; 例❹と例❺は「やってる事は違うけど、同じような構文」です。 「演算子が加算演算子か、論理積演算子か」の違いしかありません。 例❹も例❺も「変数bに代入しただけで、その後、変数bを使ってない」ので「変数bを宣言しない」「変数bに代入しない」ように書き換えできます。 例❻ int x = 1; int y = 2; x === 1 && y === 2; 例❼ int x = 1; int y = 2; x + y; ここで、例❻が「どこかで見覚えのあるプログラム」と似ていると思いませんか? 似ているのは x === 1 && y === 2; と x ===1 && console.log('こんにちは'); です。 「y === 2」の部分が「console.log('こんにちは')」に変わっただけで「やってる事は違うけど、同じような構文」になっています。 例❻も例❼も「計算だけ(式の評価)だけを行なって、評価した値を捨てている」ので、無意味なプログラムになっています(実行しても、結果を表示しない) このように「構文エラーにさえならなければ、演算子は、式が書ける場所なら、どこに、どのように使っても構わない」のです(「式が書ける場所だけ」ですので注意)

noname#226032
質問者

お礼

ショートカット演算(短絡演算) 以下の❶❷は意味的に等価です。1と2は違う式だが同じ結果になるということ。 if (x === 1) { console.log('こんにちは'); } ← ❶ else省略している。真だった時だけ{}ないを実行する。 もしxが数値の1だったらこんにちはと出す。 そうでなかった場合は何も表記されない。 偽は省略されている。 x ===1 && console.log('こんにちは'); ← ❷ 真だった時(xが数値の1だった場合)だけ&&以降を実行する。条件式ではないケースなので、両方当てはまった場合何かを実行するわけではない。 偽だった時(xが数値の1以外だった場合)は&&以降は実行されない。つまり何も表記されない。 条件式の場合はこのようになる。 xが数値の1かつ、こんにちだったら。  こんかいはそもそも条件式でないのでこのようにならない。 &&はかつ、andの意味と聞いていますが、この場合もこの意味でしょうか? ❶と❷は「意味も書き方も全然違うが、実行した結果が、偶然、同じになる」のです。 ありがとうございました。上記の認識でよいですね。

その他の回答 (14)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

「意味」で考えると混乱しますね。 プログラムというのは、コンピュータの動作を記述するものですから、「動作」で考えたほうがいいですよ。

回答No.3

>&&はかつ、andのことですよね。 そうです。 >&&はかつ、andの意味と聞いていますが、この場合もこの意味でしょうか? この意味です。 &&演算子は「expr1 && expr2」と書き、そう書いた時の動作は「expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。」となっています。 「expr1 を false と見ることができる場合は、expr1 を返します」の時は「expr2は評価(実行しない)」ようになっています。 「expr2 を返します」の意味は「expr2を評価(実行)して、その評価した値を返す」と言う意味です。 つまり、結局のところ「x===1が偽だったらfalseを返すだけ(何もしない)。x===1が真だったら、console.log('こんにちは')を演算して評価(実行)して、評価した値を返す」と言うことになります。 言い換えれば「もしxが数値の1だったらこんにちはと出す。」って事です。 ❶と❷は「意味も書き方も全然違うが、実行した結果が、偶然、同じになる」のです。 論理演算子 && は 値1 && 値2 && 値3 && 値4 && 値5 && 値6 と書いたとき 値1を評価実行し、値1がfalseなら、値2以降を無視し、falseを返す。 値1がtrueなら、値2を評価実行し、値2がfalseなら、値3以降を無視し、falseを返す。 値2がtrueなら、値3を評価実行し、値3がfalseなら、値4以降を無視し、falseを返す。 値3がtrueなら、値4を評価実行し、値4がfalseなら、値5以降を無視し、falseを返す。 値4がtrueなら、値5を評価実行し、値5がfalseなら、値6以降を無視し、falseを返す。 値5がtrueなら、値6を評価実行し、値6がfalseならfalseを返し、値6がtrueならtrueを返す。 という動作をします。

noname#226032
質問者

お礼

>>> &&演算子は「expr1 && expr2」と書き、そう書いた時の動作は「expr1 を false と見ることができる場合は、expr1 を返します。 そうでない場合は、expr2 を返します。」となっています。 難しいですね。 x ===1 && console.log('こんにちは'); の場合ならxの中身が1だった場合は、expr2 を返しますので、console.log('こんにちは');だけが実行されるのですが? 私は条件式にしか&&を使ったことがないのですが、そもそも条件式以外で使うこと自体が初めて見た状態なので、 なぜ条件式以外で使うかがよく理解できません。 たにぐちまことのよくわかるjavascriptの教科書には、すべて条件式として使っています。

noname#226032
質問者

補足

http://crocro.com/write/manga_javascript/wiki.cgi?p=%BF%BF%A4%C8%B5%B6+%BE%F2%B7%EF%CA%AC%B4%F4%A4%C8%B1%E9%BB%BB%BB%D2#joukenEnzansi でもやはり条件式として使っています。 条件式以外で使うのはもしかしてかなり上級者だけなのではないですか?

  • f272
  • ベストアンサー率46% (8477/18147)
回答No.2

> &&はかつ、andの意味と聞いていますが、この場合もこの意味でしょうか? その通りandの意味ですよ。 「x ===1」 and 「console.log('こんにちは')」 です。この式がtrueかfalseかを決めるために,左から評価します。 xが1でなければ全体がfalseと決まりますから,それ以降を評価実行することはありません。 xが1であれば全体を決めるためにその次も評価する必要があります。従ってconsole.logが評価実行されます。

noname#226032
質問者

お礼

難しいですね。 x ===1 && console.log('こんにちは'); つまりxが1なら式全体はtrueになるという言うことですが、 1かつこんにちはと表記するということになるわけではなさそうですね。 結局これは式全体trueかということを言いたいだけなのでしょうか? 1かつこんにちはと表記するというのは意味が分かりません。

noname#226032
質問者

補足

・条件式以外で使う論理演算子 すべてがtrueの場合はtrue返す。 左から順にfalseが出るまで処理を行いfalseが一回でも出れば、それ以降の処理は行わずfalseを返す でよいでしょうか?

  • bya00417
  • ベストアンサー率34% (58/170)
回答No.1
noname#226032
質問者

お礼

・条件式以外で使う論理演算子 すべてがtrueの場合はtrue返す。 左から順にfalseが出るまで処理を行いfalseが一回でも出れば、それ以降の処理は行わずfalseを返す でよいでしょうか?

関連するQ&A