Java道|4章のまとめ

演算子と型のルールがつながると、Javaの式は「なんとなく」から「理由を持って」読めるようになる。

4章では、Javaで計算や代入を行うために欠かせない、式・演算子・型変換について学んできました。

最初は、足し算や掛け算のような基本的な計算から始まりました。そこから、変数を使った計算、入力値を使った処理、インクリメント・デクリメント、複合代入演算子、演算子の優先順位、型変換、キャスト、異なる型どうしの演算へと進んできました。

一つひとつを見ると細かいルールに感じるかもしれません。けれど、これらはすべて「Javaの式をどう読むか」「値がどのように計算されるか」「結果がどの型として扱われるか」という大きなテーマにつながっています。

鬼滅の刃風にたとえると、4章は「Javaの呼吸の基礎訓練」です。演算子は技、オペランドは技を受ける値、式は技の型、型変換は呼吸の流派を切り替える動きのようなものです。どの技を先に出すか、どの型で力を扱うかを理解できると、Javaのコードをずっと落ち着いて読めるようになります。この記事では、具体的なサンプルプログラムは出さず、4章で学んだ内容を整理して振り返ります。

演算子はオペランドと組み合わせて式を作る

4章の出発点は、式と演算子でした。

Javaでは、値や変数に対して計算や代入などの処理を行うために、演算子を使います。

たとえば、次のような式があります。

1 + 2

この場合、+ が演算子です。
そして、1 と 2 がオペランドです。

要素意味
演算子計算や代入などを行う記号+、-、*、/、=
オペランド演算の対象になる値や変数1、2、num
評価されると値になるもの1 + 2、num + 5

式は、ただ記号が並んでいるだけではありません。
Javaがその式を評価すると、結果として値が得られます。

たとえば、1 + 2 は評価されると 3 になります。

鬼滅の刃風にたとえると、演算子は「技の型」、オペランドは「技をかける対象」です。
1 + 2 は、1 と 2 に対して + の型を使い、3 という結果を生み出す流れです。

変数を使うと式は実践的になる

式では、数値を直接書くだけでなく、変数も使えます。

たとえば、num1 と num2 という変数がある場合、その2つの値を使って合計を求められます。

式の考え方内容
num1 + num2num1 と num2 の値を足す
sum = num1 + num2足した結果を sum に代入する
num = num + 1num の現在値に 1 を足して更新する

変数を使えるようになると、プログラムは一気に実践的になります。

決まった数値だけを計算するのではなく、変数に入っている値に応じて結果を変えられるからです。

たとえば、合計を求める、回数を数える、残り数を減らす、点数を更新する、といった処理は、ほとんどが変数を使った演算です。

鬼滅の刃風にたとえると、変数は「隊士が持っている現在の力」です。
その力に修行成果を足したり、消耗分を引いたりすることで、状態を更新していきます。

入力値を使うと結果が変わるプログラムになる

4章では、キーボードから入力した値を使って計算する考え方も学びました。

入力値を使うと、実行するたびに結果が変わるプログラムを作れます。

手順内容
1キーボードから値を入力する
2入力値を変数に入れる
3その変数を式で使う
4計算結果を表示する

これは、とても大きな一歩です。

コードに直接書いた値だけを使う場合、結果は毎回同じになります。
しかし、入力値を変数に入れて式で使うと、ユーザーの入力によって結果が変わります。

つまり、Javaのプログラムが「固定された処理」から「状況に応じて動く処理」へ変わります。

鬼滅の刃風にたとえると、敵の強さや任務の条件をその場で受け取り、それに応じて技の威力や作戦を変えるようなものです。

インクリメント・デクリメント演算子で1ずつ増減できる

4章では、インクリメント演算子とデクリメント演算子も学びました。

演算子意味
++値を 1 増やす
--値を 1 減らす

たとえば、count++ は、count の値を 1 増やす処理です。

これは、次の考え方と同じです。

短い書き方通常の考え方
count++count = count + 1
count--count = count - 1

インクリメントとデクリメントは、回数を数えたり、残り数を減らしたり、繰り返し処理で変数を更新したりするときによく使います。

特に大切なのは、前置と後置の違いです。

書き方意味
++a先に 1 増やしてから使う
a++使ってから 1 増やす
--a先に 1 減らしてから使う
a--使ってから 1 減らす

単独で使う場合は、前置でも後置でも最終的な値は同じです。
しかし、代入や他の式と組み合わせると、結果が変わることがあります。

鬼滅の刃風にたとえると、前置は「呼吸を高めてから技を出す」、後置は「今の状態で技を出してから呼吸が高まる」という違いです。

複合代入演算子を使うと処理を簡潔に書ける

4章では、= だけでなく、+= や -= などの複合代入演算子も学びました。

複合代入演算子は、演算と代入をまとめて書ける便利な演算子です。

複合代入演算子通常の書き方意味
a += ba = a + ba に b を足して代入する
a -= ba = a - ba から b を引いて代入する
a *= ba = a * ba に b を掛けて代入する
a /= ba = a / ba を b で割って代入する
a %= ba = a % ba を b で割った余りを代入する

たとえば、sum += score は、sum に score を足して、sum を更新するという意味です。

複合代入演算子を使うと、コードが短くなるだけではありません。
「この変数を更新している」という意図も伝わりやすくなります。

鬼滅の刃風にたとえると、sum += score は「これまでの修行点に、新しい修行成果を加えて、総合修行点を更新する」ようなものです。

演算子には優先順位がある

4章の中でも特に大切だったのが、演算子の優先順位です。

Javaでは、式に複数の演算子がある場合、必ずしも左から順番に計算されるわけではありません。

たとえば、次の式を考えます。

3 + 2 * 5

この式では、* のほうが + より優先順位が高いため、先に 2 * 5 が計算されます。

先に計算される部分結果
3 + 2 * 52 * 513
(3 + 2) * 53 + 225

丸かっこを使うと、評価の順番を変えられます。

(3 + 2) * 5

この場合は、丸かっこの中が先に計算されるため、結果は 25 になります。

鬼滅の刃風にたとえると、優先順位は「技の発動順」です。
通常は強い型が先に発動しますが、丸かっこは「この型を先に出せ」という明確な指示になります。

文字列連結では丸かっこが大切になる

演算子の優先順位でつまずきやすいのが、文字列連結と数値計算が混ざる場合です。

たとえば、次のような出力を考えます。

"1+2は " + 1 + 2 + " です。"

この場合、先頭が文字列なので、+ は文字列連結として働きます。
さらに + は左結合なので、左から順番につながっていきます。

評価の流れ結果
"1+2は " + 1"1+2は 1"
"1+2は 1" + 2"1+2は 12"
"1+2は 12" + " です。""1+2は 12 です。"

そのため、表示は 1+2は 12 です。 になります。

もし 1 + 2 を先に計算したいなら、丸かっこを使います。

"1+2は " + (1 + 2) + " です。"

この場合は、丸かっこの中が先に計算されるため、結果は 3 になります。

書き方表示される考え方
"1+2は " + 1 + 2文字列として 1 と 2 が連結される
"1+2は " + (1 + 2)1 + 2 を先に計算する

文字列と数値が混ざるときは、計算したい部分を丸かっこで囲むと安全です。

図:4章で学んだ内容の全体像

↓クリックすると拡大表示されます。

この図が示していること

この図では、4章で学んだ内容が「式と演算子」を中心につながっていることを示しています。

インクリメント・デクリメント、複合代入演算子、優先順位、型変換、キャスト、異なる型の演算は、それぞれ別々の知識に見えるかもしれません。
しかし、どれもJavaの式を正しく読み書きするために必要な考え方です。

ここから分かることは、4章の内容は単なる記号の暗記ではなく、Javaの処理を正しく理解するための土台だということです。

型が変わると値の扱われ方も変わる

4章の後半では、型変換とキャストを学びました。

Javaでは、値をどの型として扱うかがとても大切です。

たとえば、int 型は整数を扱います。
double 型は小数を含む数値を扱えます。

扱える値のイメージ
int整数
double整数と小数

小さな型から大きな型へは、自動的に型変換されることがあります。

変換特徴
int → double自動で変換されることがある
double → intそのままでは代入できないことがある
double → int のキャスト小数点以下が切り捨てられる

たとえば、int の 10 を double に入れると、10.0 として扱われます。
これは、小さな型から大きな型への変換なので、Javaが自動で行える場合があります。

一方で、double の 10.8 を int に変換すると、10 になります。
小数点以下の .8 は切り捨てられます。

このように、大きな型から小さな型へ変換すると、情報が失われることがあります。
そのため、Javaは自動ではなく、キャストによる明示的な変換を求めることがあります。

鬼滅の刃風にたとえると、double 型は大きな水瓶、int 型は小さな竹筒です。
大きな水瓶の水を小さな竹筒に移すと、入りきらない部分がこぼれるかもしれません。だからJavaは、勝手には変換せず、キャストという明確な指示を求めます。

代入のときにも型変換が関わる

型変換は、演算のときだけでなく、代入のときにも関係します。

たとえば、int 型の値を double 型の変数に代入する場合、Javaは int を double に変換してくれます。

代入の例起こること
int の値を double に代入int が double に変換される
double の値を int に代入そのままでは危ないためキャストが必要な場合がある

代入は単に「値を入れるだけ」に見えます。
しかし、Javaでは代入先の型によって、値の扱われ方が変わります。

つまり、代入とは、値を移すだけでなく「どの型の器に入れるのか」を考える処理でもあります。

四則演算のときにも型変換が起こる

4章では、演算のときにも型変換が起こることを学びました。

たとえば、int 型と double 型を一緒に演算すると、int 型の値が double 型へ変換されてから計算されます。

演算処理のされ方
int + doubleint が double に変換されてから計算
int * doubleint が double に変換されてから計算
int / intint 型のまま計算
double / intint が double に変換されてから計算

ここで特に重要なのが、int / int の割り算です。

整数どうしの割り算では、結果も整数として計算されます。
そのため、小数部分は切り捨てられます。

式の型結果の考え方
int / int整数の結果になる
double / intdouble にそろえて小数の結果になる
int / doubledouble にそろえて小数の結果になる

たとえば、5 / 4 を int 型どうしで計算すると、結果は 1 になります。
1.25 にはなりません。

小数を含む結果がほしい場合は、少なくとも一方を double 型にする必要があります。

鬼滅の刃風にたとえると、int 型どうしの戦いでは、整数の型でしか結果を出せません。
小数まで含めた細かい力加減が必要なら、戦う前に double 型の呼吸へ切り替える必要があります。

図:型変換と演算結果の流れ

↓クリックすると拡大表示されます。

この図が示していること

この図では、異なる型どうしの演算と、int 型どうしの演算の違いを示しています。

左側では、int 型の 3 と double 型の 2.5 を演算しています。
この場合、int 型の 3 が double 型の 3.0 に変換され、3.0 * 2.5 として計算されます。
結果は 7.5 になります。

右側では、int 型の 5 と int 型の 4 を割り算しています。
この場合、int 型どうしの演算なので、結果も整数として扱われます。
そのため、5 / 4 は 1.25 ではなく 1 になります。

ここから分かることは、Javaの演算結果は、数字そのものだけでなく、演算に参加している値の型によって決まるということです。

4章で学んだ内容を整理する

4章で学んだ内容を整理すると、次のようになります。

学んだこと内容
式と演算子演算子はオペランドと組み合わさって式を作る
変数を使った演算変数の値を使って計算や更新ができる
入力値を使った計算入力によって結果が変わるプログラムを作れる
インクリメント・デクリメント変数の値を 1 増やしたり 1 減らしたりできる
前置と後置先に増減するか、あとで増減するかが変わる
複合代入演算子演算と代入をまとめて簡潔に書ける
演算子の優先順位どの演算が先に行われるかが決まっている
丸かっこ評価の順番を明確に変えられる
型変換型が自動的に変わる場合がある
キャスト明示的に型を変換できる
異なる型どうしの演算大きい型にそろえてから演算される
同じ型どうしの演算その型のまま計算されるため注意が必要な場合がある

この表を見ると、4章の内容は幅広く見えます。
しかし、すべて「Javaの式を正しく理解する」というテーマにつながっています。

コードは見た目どおりに動くとは限らない

4章で大切だった考え方の1つは、コードは見た目どおりに動くとは限らないということです。

たとえば、次のような場面です。

見た目の印象実際の動き
3 + 2 * 5 は左から計算しそう* が先なので 13 になる
"1+2は " + 1 + 2 は 3 になりそう文字列連結で 12 になる
double に代入すれば小数になりそうint / int の結果は整数になる
double から int にそのまま入れられそう小数が失われる可能性があるのでキャストが必要

Javaは、決まったルールに従って式を評価します。

演算子の優先順位、結合規則、型変換、キャストのルールを知っていると、「なぜこの結果になるのか」を説明できるようになります。

鬼滅の刃風にたとえると、技の見た目だけで判断せず、「どの型が先に発動するのか」「どの呼吸の流派で扱われているのか」を見ることが大切です。

これから先の学習につながる大切な土台

4章で学んだ内容は、この先のJava学習でも何度も出てきます。

たとえば、条件分岐では比較演算子や論理演算子を使います。
繰り返し処理では、インクリメント演算子や代入演算子がよく使われます。
配列やオブジェクトを扱うようになっても、式の評価や型の理解は欠かせません。

今後の学習内容4章とのつながり
条件分岐比較演算子や論理演算子を使う
繰り返し処理++ や += をよく使う
配列添字の計算や更新で演算子を使う
メソッド引数や戻り値で型を意識する
オブジェクト指向型の考え方がさらに重要になる

4章は、単に計算の書き方を覚える章ではありません。
Javaのコードを正しく読み、意図どおりに書くための基礎を固める章です。

4章の内容を読むときの考え方

4章の知識を実際に使うときは、次のように考えると分かりやすくなります。

見るポイント確認すること
演算子どんな処理をしているか
オペランド何に対して演算しているか
優先順位どこが先に評価されるか
丸かっこ評価順を変えているか
int なのか double なのか
代入先結果をどの型の変数に入れるか
キャスト明示的に型を変えているか

この見方ができるようになると、複雑に見える式も少しずつ分解して読めます。

たとえば、式を見たときに、いきなり全体を理解しようとするのではなく、

  1. どの演算子があるか
  2. どの演算子が先に評価されるか
  3. オペランドの型は何か
  4. 結果はどの型になるか
  5. どこに代入されるか

という順番で見ていくと、落ち着いて理解できます。

Javaの式を自信を持って読むために

4章で学んだことは、どれもJavaの基礎ですが、実際のコードを読むうえではとても重要です。

演算子は短い記号なので、意味をあいまいにしたまま読み飛ばしやすいです。
しかし、+、=、++、+=、/、キャストなどは、ほんの少し意味を取り違えるだけで、結果が変わることがあります。

特に意識したいのは、次の3つです。

大切な視点内容
式は評価されて値になるJavaは式をルールに従って処理する
演算子には順番がある優先順位と結合規則を意識する
型によって結果が変わるint と double の違いを意識する

鬼滅の刃風にたとえると、4章で学んだ内容は、Javaの剣士としての基礎鍛錬です。
技の順番、呼吸の型、力の受け渡し方を理解することで、次の章から出てくる複雑な処理にも対応しやすくなります。

4章で身につけた「式を分解して読む力」は、この先の条件分岐、繰り返し、配列、メソッド、オブジェクト指向の学習でもしっかり役立ちます。