chatGPTと学ぶJavaScript　第１週：JavaScriptの基礎〜演算子編〜

こちらの続きです

https://qiita.com/Nao_O/private/8c95f224a1314d572fb6

さて、今回は演算子について学んでいきたいと思います。

## 演算子
### 演算子とは
演算子、簡単で身近なものだと「＋」とか「−」とかですかね。
色々種類があるみたいなので、まずはchatGPT先生に確認してみましょう。
>JavaScriptにおける演算子について、詳しく説明してください。

**chatGPTの答え**
JavaScriptにおける演算子は、様々な種類があります。
以下に代表的な演算子を紹介します。
**代数演算子**
代数演算子は、数値の計算に用いられます。
| 演算子 | 説明 | 例 |
|:-:|:-:|:-:|
|  + | 加算  |  `1 + 2` // 3 |
|  - | 減算  |  `3 - 2` // 1 |
|  * | 乗算  |  `2 * 3` // 6 |
|  / | 除算  |  `6 / 3` // 2 |
|  % | 剰余  |  `7 % 3` // 1 |

**比較演算子**
比較演算子は、値の比較に用いられます。真偽値を返します。
| 演算子 | 説明 | 例 |
|:-:|:-:|:-:|
|  == | 等しい  |  `1 == 1` // true |
|  != |  等しくない |  `1 != 2` // true |
|  === |  厳密に等しい |  `1 === 1` // true |
|  !== |  厳密に等しくない |  `1 !== "1"` // true |
|  > |  より大きい |  `2 > 1` // true |
|  >= |  以上 |  `2 >= 2` // true |
|  < |  より小さい |  `1 < 2` // true |
|  <= |  以下 |  `2 <= 2` // true |

**論理演算子**
論理演算子は、複数の真偽値の結果を組み合わせます。
| 演算子 | 説明 | 例 |
|:-:|:-:|:-:|
|  && |  論理積（AND） |  `true  && false` // false |
|  \|\| |  論理和（OR） |  `true \|\| false` // true |
|  ! |  否定（NOT） |  `!true` // false |

**代入演算子**
代入演算子は、変数に値を代入します。
| 演算子 | 説明 | 例 |
|:-:|:-:|:-:|
|  = |  代入 |  `x = 1` |
|  += |  加算して代入 |  `x += 1`(`x = x + 1`と同じ) |
|  -= |  減算して代入 |  `x -= 1`(`x = x - 1`と同じ) |
|  *= |  乗算して代入 |  `x *= 2`(`x = x * 2`と同じ) |
|  /= |  除算して代入 |  `x /= 2`(`x = x / 2`と同じ) |
|  %= |  剰余して代入 |  `x %= 2`(`x = x % 2`と同じ) |

**三項演算子**
`condition ? value1 : value2`
条件式がtrueであれば`value1`を、falseであれば`value2`を返す。

以上が代表的な演算子です。
演算子の組み合わせによって、様々な処理を行うことができます。

...
代表的なものをあげてくれましたが、いくつか例が分かりにくいものもありますねー...
とりあえず一つずつ見ていきたいと思います。

### 代数演算子
chatGPTは「代数演算子」という言葉を選びましたが、「算術演算子」の方がメジャーな気がします。
（調べたら「代数演算子」でも間違いではないようですが、あまり聞いたことなかった...)

算術演算子は算数と同じなので（記号が違うものもありますが）イメージしやすいかと思います。
「加算」は足し算
「減算」は引き算
「乗算」は掛け算
「除算」は割り算
「剰余」は割り算した「余り」ですね。

そして、chatGPT先生があげたもの以外に
以下のようなものがあります。
| 演算子 | 説明 | 例 |
|:-:|:-:|:-:|
|  ++ |  １加算する |  `let x = 5; x++; console.log(x);` // 6 |
|  -- |  1減算する |  `let x = 5; x--; console.log(x);` // 4 |
|  ** |  べき乗する |  `2 ** 3` // 8 |

コーディング始めるまでは使い所がイメージできないかもですが
`++`（インクリメント）や`--`（ディクリメント）は初歩の練習問題とかでもよく出てくるので、すぐに馴染めると思います。
（私はまだ馴染めてません）

### 比較演算子
こちらも条件式でよくお世話になる演算子です。
これはもう、使いながら覚えるしかないですね。
`！`が否定を表しているので（詳しくは論理演算子で出てきます）
それさえ分かればいける、かな。
あ、あとは「厳密に」の意味...これ、ややこしいのですよね...
詳しくは[MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality)の解説を読んでみてください...><
難しいけど、めっちゃ大事！

### 論理演算子
これはそのまま。
`&&`はAND。算数でいうと、「〇〇かつ××」
`||`はOR。算数でいうと、「〇〇または××」
`!`はNOT。「〇〇ではない」
こちらも条件式でよく使いますね。
「〇〇かつ××の時は、`true`を返す」みたいな感じです。

### 代入演算子
こちらの説明はめっちゃ簡単にされててアレなんですが、
初心者的に分かりずらいやつですよね。

代入演算子（=）って算数的な感覚が抜けないと
`x = 1`は「xは1である」って見えちゃうんですけど
JavaScript的には（他のプログラム言語でもそうだと思いますが）
「xに1を代入する」が正しい表現です。
計算式の解答を出したいのではなく、
変数に値を入れたい訳で
やってることが全く違うので注意です。

なので、`+=`についても
`x += 1`は`x = x + 1`と同じと書かれていますが
読み方としては
「`変数x`の中に、`変数xに１を足したもの`を代入する」
となります。
あとは書き方を省略するかどうか、というだけですね。
ややこしくって、本当に嫌になりますが
慣れるまでコード書いてみるしかないです。
頑張ります。

### 三項演算子
これは、if文を1行で書けるようにしました、というやつですね。
まだif文が出てくる前にこの話は難しいかもですが、
構造としては以下の通りです。
```javascript:JavaScript
条件式 ? trueの場合の処理 : falseの場合の処理
```
if文でこれを書くとこう
```javascript:JavaScript
if(条件式){
    trueの場合の処理
}else{
    falseの場合の処理
}
```
意味は全く同じですが、
if文では数行かかるところを、1行で書けるので便利だよね、ということです。

ただし、三項演算子で書くのは簡単な処理の場合だけにした方が良いです。
if文で書いてある方が読みやすくなるのであれば、無理に三項演算子を使う必要はありません。
...と最近読んだ「リーダブルコード」という本に書いてありました。

## リンク
全てのカリキュラムへのリンクは導入編に置いております

**導入編**

https://qiita.com/Nao_O/private/2e05cc452ef70f12ab96

**JavaScriptとは何か、基本的な文法**

https://qiita.com/Nao_O/private/a52215f4234410a1bff3

**データ型**

https://qiita.com/Nao_O/private/f1b801b4768c547d1886

**変数**

https://qiita.com/Nao_O/private/8c95f224a1314d572fb6

**演算子** ⇦NOW!!

https://qiita.com/Nao_O/private/1dac938a837c752762cc

**制御構文**

https://qiita.com/Nao_O/private/88b62bba8480192d5039