• ベストアンサー

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

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

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8535/19403)
回答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

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

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8535/19403)
回答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% (8038/17175)
回答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
  • ベストアンサー率35% (56/158)
回答No.1
noname#226032
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ショートカット演算(短絡演算)について

    ショートカット演算(短絡演算) 以下の❶❷は意味的に等価です。 ◉リスト2-31 logical2.js if (x === 1) { console.log('こんにちは'); } ← ❶ x ===1 && console.log('こんにちは'); ← ❷ 上記は おそらく左がx=1ではないという仮定なので、左側がfalseになりこの時点で右側は実行されないので下記の二つは同じということだと思いますか?

  • 数学について。

    すみません。この続きのURLで、x→∞の時、f’(x)→∞も書かなくても、許容されるのでしょうか?教えていただけると幸いなのですが。 https://okwave.jp/qa/q9653170.html

  • JSについて教えてください。

    // FizzBuzz let i = 0; while(i < 100) { i++; if(i % 3 === 0){ console.log('Fizz'); continue; } if(i % 5 === 0){ console.log('Buzz'); continue; } if(i % 5 === 0 && i % 3 === 0){ console.log('FizzBuzz'); continue; } console.log(i); document.getElementsByClassName('js-test210')[0].innerHTML = i; } ・ 上記のように作成したのですが、 if(i % 5 === 0 && i % 3 === 0){ console.log('FizzBuzz'); continue; } の部分を一番上にもっていかないとこちらがうまくいかない理由がわかりますか? ・ continue; はこれ以下の処理は実行しないようにするという意味のようですが、 if内の記載以下の処理を実行しないようにするということなのでしょうか? ただそれだともともとそれ以下に何もないですよね???

  • andの意味について

    ※$a eq $b・・・$a と $b が等しい時に真 $a=1; $b=1; 下記の、例)2のandの意味が「且つ~~」として解釈していないと思うのですが、andの意味って( )の中と外だと意味が違ってくるのでしょうか。 下記の場合のandの違いを日本語訳で明確に理解したいのですが、どなたかご教授願えませんでしょうか。 例)1 if($a eq '1' and $b eq '1'){ 実行文; }else{ エラー文; } 例)2 ($a eq $b) and &Error('エラー。');

    • ベストアンサー
    • Perl
  • C言語の&に関する質問

    C言語で if (x == 0.0) (いろいろな計算) return x < 0.0 && (n & 1) ? -ans : ans; というプログラムがあるのですが、 最後のreturnのところで x がゼロ以下で且つ、n &1の場合には -ansを返し、そうでない場合にはansを返すとあるのですが、 n&1というのはどういう意味なのでしょうか? C言語で&と言えば、 http://www9.plala.or.jp/sgwr-t/c/sec14.html のページにあるように、ビットごとの AND演算子ですが、 この場合にはどういう意味で使われているのでしょうか?

  • paragon14で使っている部分だけをバックアッ

    下記の続き。 http://okwave.jp/qa/q9183079.html paragon14で使っている部分だけをバックアップしたいのですが、UIが変わっていて Partition raw processingが見当たりません? どこにあるかご存じないでしょうか?

  • and と then

    お世話になります。 今日は以下の問題です。 問題: (  )に入る適当な語を記せ、   One step further, (  ) you will fall over the precipice. 私の回答  : then 問題集の回答: and then という回答は私が問題を読んだ時に口をついて出てきてしまったのでそのまま書きました。 あとで回答を見ると and になっているので調べたのですが、 その本の中で and を要求しそうなのは  命令文 + and の使い方で   Hurry up, and you'll catch the bus. のような使い方ですが、どうも問題の文は命令文ではない。 それどころか文章として不完全なので、これは   If you go one step farther, の If you go が   省略された形だろうと解釈しました。 その前提で英辞朗で then を調べると以下の例文がありました。  If she takes good care of him, then we'll think about a bird. この文と  If you go one step farther, then you will fall over the precipice. は全く同じに見えます。また  If you go one step farther, and you will fall over the precipice. とも同じに見えます。 ここで質問ですが、and は接続詞、 then は副詞、形容詞、(名詞) となっています。 品詞が見事に違っているのに、ここまで同じ使い方、同じ意味を成すというのがどうも理解できません。 ○有り得ることでしょうか? ○それとも私の前提(If仮定文)や解釈に間違いがあり、  and にしなくてはならない積極的理由がありますか? ○また then でも使えるとした時、試験としては then でも  正解になるのでしょうか?(これはおまけの質問です) よろしくお願いします。

  • JavaScriptの問題に関して教えてください。

    下記問題の解き方および答えが考えても全然分からず、お教えいただきたいです。お願いいたします。 以下のプログラムを読んで、どういったプログラムなのかを説明してください。 let change = 0; let change_sum = 0; const data = [ 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 ]; console.log("並べ替える前"); for (let i = 0; i < data.length; i++) { console.log(data[i] + " "); }// for console.log("\n"); console.log("***********************************"); console.log(""); for (let i = 0; i < data.length - 1; i++) { for (let j = i + 1; j < data.length; j++) { if (data[i] > data[j]) { let a = data[i]; data[i] = data[j]; data[j] = a; change++; }// if }// for(内側1) console.log((i + 1) + "回目"); console.log(`${change}回`); for (let k = 0; k < data.length; k++) { process.stdout.write(data[k] + " "); }// for(内側2) console.log("\n"); change_sum += change; change = 0; }// for(外側) //最終結果の表示 console.log("***********************************"); console.log(""); console.log(`${change_sum}回`); console.log("最終結果"); for (let i = 0; i < data.length; i++) { process.stdout.write(data[i] + " "); }// for console.log("");

  • (続)これってコーシーの積分公式の矛盾!?

    https://okwave.jp/qa/q9571473.html の続きです。 文字数が多くなってしまいましたので下記のアップしましたのでご覧いただけましたら幸いでございます。 https://kyokoyoshikawa.web.fc2.com/newdir/question/q9571473.txt

  • ”黄色いもの” と言えば貴方が一番に思い付くもの

    は何ですか? https://okwave.jp/qa/q10056791.html の続きです。