JShell で、Javaを電卓として使おう（式、値、演算子）

# はじめに

- 必要な前提条件
  - Java プログラムの実行方法（特に、JShell）を理解している
  - Shell を実行できる
- これを読んで分かること
  - 式とは何か
  - 値とは何か
  - 演算子とは何か

# 体験編👋

この項目では、Java プログラムを使って電卓程度の処理を行います。Java プログラムを実際に動かしていきましょう。実行方法は前回確認した JShell です。面倒なことは抜きに、ひとまず Java に触れて体験することができます。

まずはプログラミングなどと構えたことを言わずに、「ちょっと高機能な電卓」を操作するところから始めましょう。ちょっとした計算をする際に、iPhone やパソコンの電卓アプリの代わりに、JShell で計算できるようになったらカッコいいですよね？

## 計算してみよう

以下のような計算を JShell でしてみましょう。

```java
3 + 4 //=> 7 という結果が得られる（足し算）
5 - 1 //=> 4 という結果が得られる（引き算）
6 * 2 //=> 12 という結果が得られる（掛け算）
12 / 2 //=> 6 という結果が得られる（割り算）
15 % 7 //=> 1 という結果が得られる（余りを求める計算（剰余））
```
ほかにも、なにか思いつくことがあれば入力してみましょう。壊れることはないので安心してください。

### 足し算・引き算

足し算・引き算は電卓と同じ記号なので混乱しませんね。

![plus-minus.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356995/ac1019da-1b05-d5f5-7eb1-bf0155fa77bb.gif)

### 掛け算・割り算・剰余

掛け算・割り算・剰余は記号がちょっと異なります。とはいえそんなに量は無いので、２回か３回試せばすぐ覚えますよ。

![operator-others.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356995/7f710aba-3487-b28c-58bc-7f52bac8af07.gif)

# 理解編👌

今回のハンズオンでは、よくある計算を行ってみました。

本当に電卓と同じ程度の仕事しかしていませんが、それでいいのです。この「電卓と同じ程度の仕事」がすべての基礎となります。

次回以降、 JShell で行える仕事の量はちょっとずつ電卓よりも大きくなります。しかし、まずは「電卓と同じ仕事」を構成する最小の要素について理解しましょう。それが **式** ・ **値** ・**演算子** です（ところどころ不正確な記述もありますが、これを読んでいる人が Java 初学者の前提で、分かりやすさ優先で書いています）。

## 1. 全体像（式・値・演算子）

まずはこれらの用語についておおよそのイメージを掴んでください。大丈夫、見れば分かります。
まずは 5 種類の計算をお見せします：

```java
3 + 4 //=> 7 という結果が得られる（足し算）
5 - 1 //=> 4 という結果が得られる（引き算）
6 * 2 //=> 12 という結果が得られる（掛け算）
12 / 2 //=> 6 という結果が得られる（割り算）
15 % 7 //=> 1 という結果が得られる（余りを求める計算（剰余））
```

体験編で入力したものです。そしてこのうち、式・値・演算子が何にあたるのかを図示します：

![expression-value-operator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356995/1d740270-0953-00fb-a24f-ba3710391b13.png)


言葉にすると、こんなところでしょうか：

- 式は、演算子と値によって構成される
- 式は結果を持ち、結果は値である


## 2. 式・値・演算子を個別に

ここまでで「ふふ～ん、なるほど」と思ったかたは、これ以降の説明はいったん飛ばしてください。「もうちょっと詳しく」と思った人は、このまま解説を読み進めてください。式・演算子・値は相互に関係しあった概念です。この段階で細かい話を学習するよりも、ザックリとした理解でいいので先に進みましょう。

### 2-1. 値

**値**とは、値です。……すみませんが、ここは「なんとなく分かるだろ？」で理解してください。 `1` や `2.3` や `あ` などが値です。

### 2-2. 式

**式** とは **計算されて、その結果値になるもの** です。

`2 + 3` は、計算された結果 `5` という値になります。そのため `2 + 3` は **式** と言えます。計算のことを、コンピュータの世界では **評価** と言います。

#### （おまけ）評価

今後あらためて学習しますが、 **評価** は私たちが日常生活で使う **計算** よりもやや広い概念です。

たとえば、「5 は 3 よりも大きいか？」という疑問には「はい」と答えますね。これを Java では `5 > 3` と書きます。 `5 > 3` は、「はい」という結果が得られるため、 **式** です。「ええ～」という感じですが、JShell に `5 > 3` と入力してみましょう。 

たしかに `true` という結果が得られましたね。`true` とは真実ですが、要するに「はい（yes）」です。

では反対に `3 < 5` はどうでしょうか。こんどは `false` が得られます。`false`　は間違ったとか誤ったという意味ですが、要するに「いいえ（no）」です。「 `3 < 5` という **式** を **評価** すると、 **結果** として `false` という **値** が得られる」ということです。

評価がわかることで、式について少し詳しくなれたのではないでしょうか。

#### （おまけ）結果のない式

ふだん意識することはありませんが、結果の無い式もあります。それは、「メソッド呼び出し式を書いた場合であり、かつ、メソッドの戻り値が `void` の場合」です。

これは既習者に「へえ～」と言ってもらうために書いているのですが **メソッド呼び出し** って **式** なんですよ。**メソッド呼び出し式を評価した結果の値が戻り値です** （これ、なんか感動しませんか？）。つまりあの `.` が演算子ということです。そうなると、戻り値の型が `void` 、つまり戻り値を返さないメソッドの結果は **なにもない** んです。

### 2-3. 演算子

演算子とは、演算を表現するための記号です。演算とはざっくり **計算** のことだと理解してください。
`3 + 5` の `+` であれば、「 3 と 5 を足す」という演算を表現する記号です。

#### 2-3-1. 算術演算子

算術演算子とは、演算子のうち、算術計算（足し算や掛け算など）を行うためのものです。ここからしばらくは算術演算子を中心に学習します。

#### 2-3-2. そのほかの演算子

算術演算子以外にもたくさんの演算子が存在します。いつかまとめます！

# 次回予告

今回で、Java を電卓のように使用するための基本的な内容を学習しました。

しかし、電卓というにはまだ足りない機能があります。それは M です。電卓についているのを見たことがありませんか？　Memory の略で、計算結果を一時的に保存しておくことができます。Java では電卓以上に便利に値を一時保存できますよ。お楽しみに！