ここでは、変数と基本的な演算子について学ぶ。
変数とはなにか
変数とは、何かを記憶 (保存) するものである。 箱で説明されることもあるが、ここではホワイトボードだとしよう。
![/images/whiteboard-empty.png /images/whiteboard-empty.png](https://interaktiv.chemie.uni-mainz.de/programming/images/whiteboard-empty.png)
このホワイトボードを使うにはまず名前を付けなくてはいけない。
例えば a
という名前を付けておこう。
![/images/whiteboard-a-empty.png /images/whiteboard-a-empty.png](https://interaktiv.chemie.uni-mainz.de/programming/images/whiteboard-a-empty.png)
a
という名前を付けた
このホワイトボードには「一つの」情報を書くことができる。 例えば、120 という一つの数字を書いてみよう。
![/images/whiteboard-a-120.png /images/whiteboard-a-120.png](https://interaktiv.chemie.uni-mainz.de/programming/images/whiteboard-a-120.png)
この情報を書き変えることもできるが、その場合は以前の情報は消えてしまう。 つまり上書きしかできない。
例えば、新たに 226 という情報を残したければ、以前の情報は消えてしまう。 ただし、プログラムを書く際は明示的に消す必要はなく、新しい情報を書くと古い情報は自動的に消えてしまう (ファイルの上書きと似ている)。
![/images/whiteboard-a-120-erased.png /images/whiteboard-a-120-erased.png](https://interaktiv.chemie.uni-mainz.de/programming/images/whiteboard-a-120-erased.png)
![/images/whiteboard-a-226.png /images/whiteboard-a-226.png](https://interaktiv.chemie.uni-mainz.de/programming/images/whiteboard-a-226.png)
これをプログラムとして書くと以下のようになる。
let a; // a という名前のホワイトボードを作成する
a = 120; // a に 120 という数字を入れる
a = 226; // a に 226 という数字を入れる (上書き)
変数を作るには let
を用いる。
一行目では「 a
という名前の変数を作る」と宣言している。
//
から行の最後まではコメントであり、入力しなくても良い。
この変数 a
に値を保存 (代入という) するには、 a = 120
のように等号 =
を使う。
変数と値の場所はそれぞれ =
の前及び後である。
この順番は逆にはできない。
これは、疑似プログラム(処理を流れを示すためのプログラムっぽい記法) では
a ← 120;
などと書くこともある。
a ← 120; // Pseudocode
上のプログラムを実行しても何も起こらない。
正確には、コンピューター内部では正しく処理されているのだが、その結果が表に出てこないので何も起こっていないように見える。
従ってこのままでは何が起こっているか分かりにくいから、値を表示させてみよう。
そのためには以前のように console.log()
を使う。
-
上のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 (何も起こらないのが正解である)。
-
次に、以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。
いずれもコメント (//
とその行末まで) は入力しなくてもよい。
let a; // a という名前のホワイトボードを作成する
a = 120; // a に 120 という数字を入れる
console.log(a); // (現在の) a の中身を表示
a = 226; // a に 226 という数字を入れる (上書き)
console.log(a); // (現在の) a の中身を表示
ある変数の値を別の変数に代入することもできる。
例えば、 b
に a
の値を代入するのであれば、
b = a; // b に a の値を入れる
と書く。 これも疑似プログラムでは
b ← a; // Pseudocode
などと書く。
b
と a
の順番を変えられない (意味が変わってしまう) ことに注意しよう。
また、 b = a;
を a = b;
と書きかえると何が起こるか? それはなぜか?
let a;
let b;
a = 120;
b = 10;
console.log("before: a =", a, "b =", b);
b = a; // a = b; に変えると何が起こる?
console.log("after: a =", a, "b =", b);
変数の内容の変更
上に書いたように、変数の値は変更できる。
実際のプログラムを書くと (現在の値は分からないが、とにかく) a
の値を 1 増やしたい、という場面が良くある。
その場合は、以下のように書く。
a = a + 1;
これを数式として見てしまうと「間違っている」となってしまうが、これの意味は、
「『現在の a
足す 1』を計算し (右辺)、その結果を a
に保存する」となる。
これは疑似プログラムでは a ← a + 1
と書くこともある。
a ← a + 1; // Pseudocode
let a;
a = 100;
console.log(a);
a = a + 10;
console.log(a);
a = a + 20;
console.log(a);
宣言と初期化
これまでは「変数を作る」と表現していたが、JavaScript ではこれを「変数の 宣言 」という。
すでに見たように、 let
を使って変数を宣言する。
変数を作成した後最初に値を代入することを 初期化 という。 上のコードでは変数の宣言と初期化を分けて書いていたが、これを一度に書くこともできる。
let a = 100;
console.log(a);
初期化せずに変数を使うと予期せぬことが起こりうるので、変数の初期化を常に意識しておくことは大変重要である。
次のプログラムは a
が初期化されておらず、間違いである。
// ! 間違い !
let a;
a = a + 10;
文字列
これまでは数字を扱ってきたが、文字列を使うこともできる。
let str;
str = "Hello, world"; // もちろん let str = "Hello, world"; でもよい
console.log(str);
こんな感じである。
JavaScript では文字列に対しても +
が使え、これは結合を意味する。
let str1 = "First string";
let str2 = "Second string";
// 三つの文字列 (str1, スペース, str2) を結合
let str3 = str1 + " " + str2;
console.log(str3);
console.log(str1 + " is first string.");
変数同士の計算
計算する方法については 演算子 で詳しく述べるが、予習がてら簡単な計算をしてみよう。
let a = 100;
let b = 50;
let c = a + b;
console.log(c);
ほぼ自明であろうが、一応実際に試してみよう。
このプログラムを以下に入力し、実行してみよ。
変数名 (1)
ここでは厳密な規則は説明しない。 変数名には以下の文字が使える。
-
英字
-
大文字・小文字を区別する。すなわち
a
とA
は異なる変数である
-
-
2文字目以降に数字を使ってもよい
-
数字で始めることはできない。例えば
1a
は変数名としては使えない
-
-
アンダースコア
_
も使える-
但し
_
から始めるのは望ましくない (通常_
から始めるのは、何か特別な意味がある場合のみである)
-
-
一部使えない名前がある:
let
,for
など (JavaScript ですでに使われているから)
ほかにも使える文字はあるが、最初は英数字のみにしておくのが無難である。
変数名 (2)—より良く書くために
変数名は規則に従っていればどのような名前でも良いが、良い変数名・悪い変数名というのはある。 状況にもよるので、絶対的なルールがある訳ではないが、
-
ループ変数 (繰り返し (ループ) 参照) は
i
,j
,k
等を使うのが一般的である -
整数は
n
,m
などを使うことが多い -
上は例外的な場合で、それ以外では、長くても分かりやすい名前が良い
-
名前は内容を表わすものであるべき
-
一つの変数を複数の目的に使わない
などは意識しておいて欲しい。
ループについては後で学ぶが、例えば、
for (let loop1 = 0; loop1 < 10; loop1++) {
...
}
は避けるべきで、よほど特別な理由が無い限り、(loop1
等ではなく) 慣例通り i
, j
, k
等を使うべきである。
また、
let string;
string = 0; // え? 文字列じゃないの?
let number;
number = "Hello"; // number とは?
はプログラムとしては正しく動くが、名前と内容が一致していないので良くない。
JavaScript では、
let a;
a = 0;
console.log(a);
a = "Hello, world";
console.log(a);
と書くことも可能ではあるが、変数を全く関係のない二つの役割に使用していて、良くない書きかたである。 一つの変数は一つの目的に使うべきである。
数値の書きかた
これまで見てきたように、数値は 0
, 100
, -10
などと書ける。
小数も 1.3
, -0.15
などと書ける。
特別な書き方として、e-記法がある。
例えば $3.0\cdot10^8$、$1.38\cdot10^{-23}$ はそれぞれ
3.0e8
1.38e-23
と書ける。
また $\pi$ などは Math.PI
として定義されている。代表的なものに以下がある。
$\pi$ | Math.PI |
$3.14159\cdots$ |
$\mathrm{e}$ | Math.E |
$2.71828\cdots$ |
$\sqrt{2}$ | Math.SQRT2 |
$1.41421\cdots$ |
例えば次のように使える。
// 半径 r の円の面積を求める
let r = 10;
let area = r * r * Math.PI;
console.log(area);
数値の範囲
詳細及び厳密な値については割愛するが、およそ $\pm10^{-308}$ と $\pm10^{+308}$ の間の数値が使える。 逆に言うと、以下は使えない:
-
$10^{+1000}$ など $10^{308}$ より大きな値
-
$-10^{+1000}$ など $-10^{308}$ より小さな値
-
(0 以外の) $-10^{-308}$ と $10^{-308}$ の間の値
具体的な数値を覚える必要は全くないが、「表現できる数値には限度がある」という点だけはしっかり押さえておこう。
まとめ
このページでは変数について学んだ
-
変数とは数値や文字列を記憶する場所である (このページではホワイトボードで例えた)
-
変数を使うには宣言 (名前付け) が必要である。そのために
let
を使う -
変数は新しい情報で上書きできる
-
変数には適切な名前を付けるように心掛けるべきである