フリーキーズ | 独学プログラミング

Javaで学ぶ評価(eval)の優先順位と結合規則の原則

最終更新日
【画像】Javaで学ぶ評価(eval)の優先順位と結合規則の原則

プログラミングにおいて、数学とは違い、=は代入を表しています。このイメージを頭に定着させることが、プログラミング学習における最初のハードルと言えるでしょう。

このコンテンツでは、代入をする際に使う「式」において、どのような優先順位で評価されるかを説明します。
また、併せて学習しておきたい「結合規則の原則」についても一緒にご紹介します。

Javaプログラミングにおける評価と優先順位

まず、以下のコードを見てみましょう。

public class Main {
    public static void main(String[] args) {
		int a = 1;
		int b = 2;
		int c = a + b;
    }
}

変数aと変数bを加算した結果が変数cです。
この単純なプログラムは、当然ながらa + bが最初に評価(evalやevaluationとも言います)されます。

では、次に以下のコードを見てください。

public class Main {
    public static void main(String[] args) {
		int a = 4;
		int b = 6;
		inc c = 3;
		int d = a + b - c;
    }
}

こちらを見ると、a + b - cとなりますが、この計算がすべて同時に行われるわけではありません。
最初にa + bが評価されるため、結果的に(a + b) - cという形で評価されます。この文脈でいえば、=はさらにその最後に評価される(≒代入される)ということです。

式は基本的に左側から評価されますが、例外的に優先順位を繰り上げる演算子があります。
*(乗算、掛け算)と/(除算、割り算)、そして%(剰余、割り算の余り)です。以下のコードを見てみましょう。

public class Main {
    public static void main(String[] args) {
		int a = 2;
		int b = 3;
		int c = 5;
		int d = a + b * c;
		System.out.println(d);
    }
}

左側からの評価であれば、(2 + 3) * 5という評価順になり、結果は25となりますが、この場合は2 + (3 * 5)17になります。
ここは数学と同じで、計算上は*のほうが高い優先順位のため、こういった結果となります。数値計算が必要なシステムを書く際には気をつけましょう。

結合規則の原則

優先順位の説明で、=は最後に評価されると述べましたが、=に関しては「右から評価される」というルールがあります。
これは+=-=といった演算子の場合でも同じく「右から評価」です。こういったルールをプログラミングにおいて「結合規則の原則」と言います。

代入演算子は右から、と覚えておくと良いでしょう。
なお、代入演算子を利用した複合代入演算子の一覧は以下となります。これらはすべて「右から評価」です。

演算子
+=a += 1a = a + 1
-=b -= 1b = b - 1
*=c *= 5c = c * 5
/=d /= 3d = d / 3
%=e %= 2e = e % 2

普段プログラミングをしているときに、特段意識することはありませんが、こういった原則があることは頭の片隅に入れておいてください。

数学との違い

プログラミングはよく数学に似ていると言われがちですが、完全に数学と同じではないため、たびたび混乱することがあります。
コンピュータと人間の通訳をする目的であるため、コンピュータに理解しやすい書き方が追求されてきた結果、今のような書き方が主流になるよう進化してきました。

独特でとっつきにくい表現や記法も多いですが、慣れれば意識せず書けるようになるため、挫けないよう気持ちをしっかり持っていきましょう。

関連するコンテンツ