どうもこんにちは!
サバ缶(@tech_begin)です。
こちらの記事で、Javaにおける計算式の方法について解説してきました。
今回は、その計算式の中でJavaがどのような順序で計算を行なっているのかを解説していきます。
Javaのことを知ることで、効率的かつ正確なプログラミングを行うことができますよ!
「式の評価」とは
Javaの式にはオペランドとリテラルがありました。
式に従って計算をすることを「評価:evaluation」と呼びます。
どのプログラミング言語でも『評価』を行うことで、計算の優先順位を決めています。
計算式の評価の原則
計算式には変わりようがない「原則」があります。
その原則には、3つあります。
- 評価結果への置換の原則
- 優先順位の原則
- 結合規則の原則
これらを以下で詳しく見ていきます。
評価結果への置換の原則
言葉だけ聞くとちょっと難しそうですが、一つずつ順番に見て行けば簡単です。
例えば以下のような式があったとしましょう(一旦Javaの文法に則って変数に代入しています)
int a = 1 + 1;
+演算子は、オペランド(ここでは1というデータ)を加算する性質を持っています。
それと同時に、結果を「置換する」という動作もします。
int a = 1 + 1;
// 以下に置換されて実行される
int a = 2;
これを『評価結果への置換の原則』と呼びます。
これは私たち人間も頭の中で計算するときに行うことなので、馴染みもあって理解しやすいかと思います。
重要
演算子は周囲のオペランドの情報を使って計算を行い、それらオペランドを巻き込んで結果に置き換わる(置換される)。
優先順位の原則
次は、1つの式に複数の演算子があった場合、どのように計算をするか判断する原則についてです。
Javaにおける計算では、15段階の優先順位があります。
かと言って、別に全て覚える必要はありません。
一般的な計算方法と同じなので、身構えなくて大丈夫です!
基本的に以下のような法則を覚えておけば大丈夫です。
- 第三優先 → +と-
- 第二優先 → *と/と%
- 第一優先 → ()
/* 例その1 */
int a = 10 + 20 * 3;
// *(掛け算)の方が優先度が高いので、以下のようになる
int a = 10 + 60;
// 置換の原則によって、以下のようになる
int a = 70;
/* 例その2 */
int b = (10 + 20) * 3;
// ()で囲まれた計算が最優先されるので、以下のようになる
int b = 30 * 3;
// 置換の原則によって、以下のようになる
int b = 90;
これらの計算の順番は、小学生のころ算数で学んだものと同じですね。
重要
式に演算子が複数ある場合は、Javaで定められた優先順位の高い演算子から順に評価される。
基本的には、算数と同じ計算の順序で問題ない。
結合規則の原則
置換、優先順位があることがわかりました。
もし仮に同じ優先順位のものが並んだ場合は、どのような順番で計算するのでしょうか。
演算子には必ず「左から評価する」「右から評価する」という計算の順番の方向が決まっています。
基本的には四則計算の演算子(+, -, *, /, %)は『左から右』へ。
代入する演算子(=)は『右から左』へ。
/* 例その1 */
int a = 10 + 20 + 30;
// +は左から計算するので、以下のようになる
int a = 30 + 30;
// 以下のように置換される
int a = 60;
/* 例その2 */
int a = b = 100;
// =演算子は右から左へ計算していくため、以下のようになる
int a = 100;
これらの優先順位や計算の方向は、暗記で覚えようとする必要はありません。
コードを書けば書くほど自然と定着していくので、まずは多くのコードを書いていきましょう!
重要
式の中に同じ優先順位グループに属する演算子が複数ある場合、演算子ごとに決められた方向から順に評価される。
まとめ
基本的に小学生の頃に学んだ算数とほとんど同じですね。
解説文を読めば、基本的な部分は理解できるかと思います。
しかし、どうしても書かれている意味がわからない、ちょっと相談したいという方は、お気軽にTwitterなどにてご連絡くださいませ。