Programmierkurs
für Naturwissenschaftler/innen

変数と値

ここでは、変数と基本的な演算子について学ぶ。

変数とはなにか

変数とは、何かを記憶 (保存) するものである。 箱で説明されることもあるが、ここではホワイトボードだとしよう。

/images/whiteboard-empty.png
ホワイトボード (変数のメタファー)

このホワイトボードを使うにはまず名前を付けなくてはいけない。 例えば a という名前を付けておこう。

/images/whiteboard-a-empty.png
a という名前を付けた

このホワイトボードには「一つの」情報を書くことができる。 例えば、120 という一つの数字を書いてみよう。

/images/whiteboard-a-120.png
120 という数字を保存

この情報を書き変えることもできるが、その場合は以前の情報は消えてしまう。 つまり上書きしかできない。

例えば、新たに 226 という情報を残したければ、以前の情報は消えてしまう。 ただし、プログラムを書く際は明示的に消す必要はなく、新しい情報を書くと古い情報は自動的に消えてしまう (ファイルの上書きと似ている)。

/images/whiteboard-a-120-erased.png
新しい情報を書くために、古い情報を消す (自動的に行われる)
/images/whiteboard-a-226.png
新しい情報 "226" を記録

これをプログラムとして書くと以下のようになる。

let a;		// a という名前のホワイトボードを作成する
a = 120;	// a に 120 という数字を入れる
a = 226;	// a に 226 という数字を入れる (上書き)

変数を作るには let を用いる。 一行目では「 a という名前の変数を作る」と宣言している。 // から行の最後まではコメントであり、入力しなくても良い。

この変数 a に値を保存 (代入という) するには、 a = 120 のように等号 = を使う。 変数と値の場所はそれぞれ = の前及び後である。 この順番は逆にはできない。 これは、疑似プログラム(処理を流れを示すためのプログラムっぽい記法) では a ← 120; などと書くこともある。

a ← 120;	// Pseudocode

上のプログラムを実行しても何も起こらない。 正確には、コンピューター内部では正しく処理されているのだが、その結果が表に出てこないので何も起こっていないように見える。 従ってこのままでは何が起こっているか分かりにくいから、値を表示させてみよう。 そのためには以前のように console.log() を使う。

  1. 上のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 (何も起こらないのが正解である)。

  2. 次に、以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。

いずれもコメント (// とその行末まで) は入力しなくてもよい。

let a;		// a という名前のホワイトボードを作成する
a = 120;	// a に 120 という数字を入れる
console.log(a);	// (現在の) a の中身を表示

a = 226;	// a に 226 という数字を入れる (上書き)
console.log(a);	// (現在の) a の中身を表示

実行結果

ある変数の値を別の変数に代入することもできる。 例えば、 ba の値を代入するのであれば、

b = a;	// b に a の値を入れる

と書く。 これも疑似プログラムでは

b ← a;	// Pseudocode

などと書く。 ba の順番を変えられない (意味が変わってしまう) ことに注意しよう。

以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 何が起こっているか説明せよ。

また、 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

次のプログラムを実行すると何が起こるか、考えよ。 その後に このプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 予想と結果が一致していたか確認せよ。

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)

ここでは厳密な規則は説明しない。 変数名には以下の文字が使える。

  • 英字

    • 大文字・小文字を区別する。すなわち aA は異なる変数である

  • 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

と書ける。

これはあくまで $3.0\cdot10^8$ のような書きかたができないプログラム特有の書き方であるから、レポートなどの文書やグラフ等では e-記法は使うべきではない

また $\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 を使う

  • 変数は新しい情報で上書きできる

  • 変数には適切な名前を付けるように心掛けるべきである