From:リスキルテクノロジー 高坂一城 新宿本校にて ソフトウェア開発をする際、 ソースコード上で「演算(計算)」をすることが しばしばあります。 例えば、 ある品物の消費税込の価格を計算するには、 税抜き価格 * 1.08 ("*"は掛け算) といった演算をする必要があります。 上記の例で "*"という演算(ここでは掛け算)をするための記号を 「演算子」と呼びます。 掛け算以外にも、 一般的なプログラミング言語には、 +:足し算 -:引き算 /:割り算 といった演算子が存在します。
複雑な演算
先ほどの例では、 演算子が一つしかありませんでしたが、 4 + 8 / 4 * 2 - 6 このように複数の演算子が存在する場合、 どのように演算されるのでしょうか。 例えば、 左側から順番に演算をした場合、 答えは、「0」になります。 しかし、「0」という答えは正しくありません (正しくは2となります)。 つまり今回の例の場合、 左から順番に演算をしてはいけない、 ということになります。 では、 どういう順番で演算されるのでしょうか。
演算の順番
演算子には、 「優先順位」と「結合規則」という ルールがあります。 このルールに従って演算が行われます。
優先順位
優先順位は、 どの演算を先に行うのかを決定するために 使われます。 一般的なプログラミング言語では、 以下のようになります。 -------------------------------- 優先順位 演算子 -------------------------------- 高 * / 低 + - -------------------------------- "*"と"/"は"+"と"-"よりも 優先順位が高いため、先に演算されます。 例えば、 3 + 5 * 4 の場合、 「5 * 4」が先に行われ、 その結果(20)が「3」と足し算される このようになります。
結合規則
結合規則とは、 優先順位の同じ演算子が複数存在する場合、 どの演算を先に行うのかを決定するために 使われます。 一般的なプログラミング言語では、 以下のようになります。 -------------------------------- 結合規則 演算子 -------------------------------- 左 * / 左 + - -------------------------------- "*"と"/"は優先順位が等しいため、 同時に存在する場合は左側から順に 演算されることを意味します。 "+"と"-"の場合も同様です。 例えば、 8 / 4 * 2 の場合、 「8 / 4」が先に行われ、 その結果(2)が「2」と掛け算される このようになります。
演算子の間違いによる バグは見つけにくい
このように、 ソースコード上で演算を実施する場合、 演算子の「優先順位」と「結合規則」を 常に意識する必要があります。 また、ここでは 4種類の演算子しか取り上げていませんが、 一般的なプログラミング言語では、 「30種類」程度の演算子が存在します。 全ての演算子に 「優先順位」と「結合規則」が 定められています。
さらに、演算子の記述順序を間違えても、 (文法的な)エラーにはなりません。 そのため、演算子の記述間違いによる バグ(不具合)を引き起こさないように 「優先順位」と「結合規則」には 注意をしてみてください。 ------------------------------------- PS.Javaを基礎からしっかり学びたいなら、 社会人のためのプログラミングスクールで!! -------------------------------------