ここでは算術演算子について学ぶ。
基本的な演算
足し算についてはすでに 変数 で見た。
四則演算はそれぞれ
-
+
-
-
-
*
(かけ算) -
/
(割り算)
で計算できる。
また剰余は
-
%
で計算できる。 例えば、
console.log(5 % 3)
は 5 を 3 で割ったときの余りである 2 が表示される。
べき乗は
-
**
である (**
がない言語や、別の記号を使う言語もある)。
例えば、
console.log(2 ** 3);
は 2 の 3 乗 (つまり $2^3$) である 8 が表示される。
なお、 -2 ** 4
は $-2$ の $4$ 乗であるのか $2$ を $4$ 乗したものに $-1$ を掛けたものなのかがあいまいなので、
このような書きかたはできない。
この場合は (-2) ** 4
($= 16$) か -(2 ** 4)
($=-16$)のように書く。
*
や **
はプログラム特有の書き方であるから、レポートなどの文書やグラフ等ではこれらの記号を使うべきではない
紹介した 6 つの演算子 +
, -
, *
, /
, %
及び **
を使った計算を実際に実行してみよ。
例えば:
console.log(10 + 3);
console.log(10 - 3);
console.log(10 * 3);
console.log(10 / 3);
console.log(10 % 3);
console.log(10 ** 3);
優先順位を変更・明示したい場合や、あいまいさを避けるために (
… )
を使うことができる。
ただし、このような目的では [
… ]
や {
… }
は使うことができない。
console.log(2 * (3 + 4));
console.log((2 * 3) + 4);
console.log((-2) ** 3);
一つめは $2 \times 3 + 4$ ではなく $2 \times (3 + 4)$ を計算したい場合、つまり加算を優先させたい場合の例である。
二つめは括弧なしで console.log(2 * 3 + 4)
と書くのと同等である。
つまり、この場合の括弧は不要であるが、あっても問題ない。
開きと閉じが対応していれば、余計な括弧を入れても良いという例である。
この例は自明であまり意味がないが、実際の場面では複雑な 条件式 を書く場合などに、
このような優先順位を明示するための(実際には不要な)括弧を書く場合がある。
三つめはすでに見た例である。
以下の計算結果を表示するプログラムを書け。
$$ \begin{align} & 5 + 3 \\ & 3 - 10 \\ & 20 - ( 3 \times 4 ) \\ & 5 \times (-3) \\ & 5 + \left\{ \frac{3}{4} \times (4 - 2) \right\} \\ & 2^{-3} \end{align} $$
変数を使った計算
計算結果を変数に代入したい場合は、数値の代わりに式を書けばよい。 初期化に式を使うこともできる。 以下はいずれも正しい書きかたである。
let a;
a = 10 + 20;
let b = 50 / 3;
変数を使った計算もできる。
let a = 5;
let b = 3;
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);
console.log(a ** b);
変数と数値との計算ももちろん可能である。
let a = 5;
console.log(a + 3);
console.log(a - 3);
console.log(a * 3);
console.log(a / 3);
console.log(a % 3);
console.log(a ** 3);
新しい変数を作って、それに入れることもできる
let a = 5;
let b = 3;
// もちろん
// let calc1;
// calc1 = a + b;
// などと書くこともできる
let calc1 = a + b;
let calc2 = a - b;
let calc3 = a * b;
let calc4 = a / b;
let calc5 = a % b;
let calc6 = a ** b;
console.log(calc1);
console.log(calc2);
console.log(calc3);
console.log(calc4);
console.log(calc5);
console.log(calc6);
この辺は通常の数学とほぼ同様である。
変数を使った計算を実際にやってみよ。
代入演算子
=
は代入演算子 (名前は覚えなくてもよい) と呼ばれ、これも演算子として扱われる。
意味はすでに学んだ通りである。
さらに特別な演算子として、複合代入演算子がある (名前は覚えなくてもよい)。
a += 10
と書くと、 a = a + 10
の意味になる。
-
+=
-
-=
-
*=
-
/=
-
%=
-
**=
がある。いずれも意味は自明であろう。
次のプログラムを実行するとどのようになるか考えよ。 その後、実際に実行して、予想通りだったか確認せよ。
let a = 12;
let b = 10;
a += 2;
console.log(a);
a -= 3;
console.log(a);
a *= 2;
console.log(a);
a /= 10;
console.log(a);
a += b;
console.log(a, b);
インクリメント演算子・デクリメント演算子
1 を足す、というのはしばしば必要になるので、 a++
という書き方もある (ない言語もある)。
これは a = a + 1
と同等である。
特に ループ で良く使われる。
同様に 1 を引くというのは a--
と書ける。
これらは変数に対してしか適用できない
(2--
は $2 = 2 - 1$ となるが、これが意味をなさないのは明らかだろう)。
従って以下は全て同じ意味となる。
a = a + 1;
a += 1;
a++;
++a; // 次で説明する
前置と後置
++
と --
は前置と後置があり、動作が異なる。
ざっくり言うと、 a++
は a
の 値を使ってから a
を増加させる。
++a
は a
を 増加させてから a
の値を使う。
let a;
let b;
// 後置の例
b = 10;
a = b++;
console.log(a, b);
// 前置の例
b = 10;
a = ++b;
console.log(a, b);
一つ目 (a = b++;
) は、
a = b;
b = b + 1;
と同等であり、二つ目 (a = ++b;
) は、
b = b + 1;
a = b;
と同等である。
次のプログラムを実行してみよ。 どのような結果が出たか、なぜそのようになったか考えてみよ。
let a;
let b;
// 後置の例
b = 10;
a = b++;
console.log("a = ", a);
console.log("b = ", b);
console.log("-----"); // ただの区切り
// 前置の例
b = 10;
a = ++b;
console.log("a = ", a);
console.log("b = ", b);
但しこのような書き方は時に混乱の原因となるので、最初のうちは単独で使う方が良いだろう。 例えば、
let a;
let b;
// 後置の例
b = 10;
a = b;
b++; // ++b; でもよい
console.log(a, b);
// 前置の例
b = 10;
++b; // b++; でもよい
a = b;
console.log(a, b);
などのように。
また、前置演算子の利用頻度は比較的低い。
文字列
既に変数でも述べたように、文字列にも +
が使え、これは連結を意味する。
+=
も使える。
文字列に対して -
は使えない。
文字列と数値に対して +
(例えば "abc" + 1
) を使うこともできるが、言語のよって動作が異なったりするなど間違いを犯しやすいので、
このような書き方は避けるべきである。
演算子の優先順位
詳細は割愛するが、以下を押さえておけばひとまずよいだろう。 要は数学の場合と大体同じである。
優先度が高いものから順に、
-
(
…)
-
**
-
*
,/
,%
(%
は割り算の一種と考えるとよい) -
+
,-
-
=
,+=
,-=
,*=
,/=
,%=
,**=
-
**
を除き、同じ優先度のものが並んでいる場合は、左側が優先。 例えば10 / 2 * 3
は左側にある
/
が優先されるので(10 / 2) * 3
と同じであり、10 / (2 * 3)
ではない -
**
が並んでいる場合は右側が優先。 例えばa ** b ** c
は
a ** (b ** c)
と等価である ((a ** b) ** c
ではない)。 ただしこの場合は、曖昧さや間違いを避けるために、常に(...)
を使うのが望ましい。
他にも色々ルールがあるのだが、まずはこれらのことを覚えておけば良いだろう。
まとめ
このページでは重要な算術演算子について学んだ
-
四則演算 (
+
,-
,*
,/
), 剰余 (%
), べき乗 (**
) -
複合代入演算子 (
+=
,-=
,*=
,/=
,%=
,**=
) -
インクリメント演算子・デクリメント演算子 (
++
.--
) -
演算子には優先順位がある。 優先順位を変えたいときは
(
…)
が使える (通常の数学とほぼ同一)