未定義は、変数にまだ値が入っていない状態を表します。
空っぽ、というより、まだ決まっていない状態だと考えると分かりやすいです。
擬似言語では、変数を使う前に宣言します。 しかし、宣言しただけでは、まだ具体的な値が入っているとは限りません。
整数型: x
このように書くと、x という変数を使う準備はできています。
ただし、まだ x に値を代入していないため、値は未定義です。
基本情報技術者試験の擬似言語でも、変数の値がいつ決まるのかを追うことは大切です。 未定義の状態を理解しておくと、トレースのミスを減らしやすくなります。
まずは、未定義の動きを見てみましょう。 次のコードを右のシミュレーターで実行してください。
○main
整数型: x
print(x)
出力は 未定義 です。
x を宣言しましたが、まだ値を代入していないからです。
ここで行っているのは、次の2つです。
x という整数型の変数を用意するx を表示するしかし、x にはまだ値が入っていません。
そのため、表示しようとしても、具体的な数値は出てきません。
次に、値を入れてから表示します。
○main
整数型: x
x ← 5
print(x)
出力は 5 です。
今度は、x ← 5 で x に5を入れています。
そのあとで print(x) を実行しているので、5が表示されます。
流れを1行ずつ読むと、次のようになります。
x という整数型の変数を用意するx に5を入れるx を表示するこのように、変数は宣言しただけでは使える値が入っているとは限りません。 値を使う前に、代入されているかを確認することが大切です。
未定義の値を使って計算しようとすると、何を計算すればよいか分かりません。
○main
整数型: x
整数型: y
y ← x + 1
print(y)
このコードはエラーになります。
x に値が入っていないからです。
y ← x + 1 では、右側の x + 1 を先に計算しようとします。
しかし、x が未定義なので、x + 1 の計算ができません。
つまり、次のような状態です。
x は宣言されているx に値は入っていないx を使って計算しようとしているエラーが出ても、あわてなくて大丈夫です。 診断欄を見て、どの変数が未定義なのか確認しましょう。
先ほどのコードは、x に値を入れてから計算すれば動きます。
○main
整数型: x
整数型: y
x ← 4
y ← x + 1
print(y)
出力は 5 です。
x に4が入っているので、x + 1 は 4 + 1 として計算できます。
結果は5なので、y に5が入ります。
このように、変数を計算に使う前には、その変数に値が入っている必要があります。
未定義は、0とは違います。
整数型: x
この時点の x は未定義です。
0が入っているわけではありません。
0を入れたい場合は、はっきり代入する必要があります。
整数型: x
x ← 0
この場合、x には0が入っています。
未定義ではありません。
この違いは大切です。 未定義は「まだ値が決まっていない状態」。 0は「0という値が入っている状態」です。
合計を求める処理では、最初に sum ← 0 のように書くことがあります。
これは、合計の初期値として0を入れているという意味です。
未定義は、次のような場面で起こりやすいです。
特に、少し長い擬似言語では、どこで値が入ったのか分からなくなることがあります。 そのため、変数の値を上から順に追うことが大切です。
シミュレーターでエラーが出たときは、まず「使う前に値が入っているか」を確認しましょう。
未定義を防ぐために、最初に値を入れておくことがあります。 これを初期化と呼ぶことがあります。
例えば、合計を求める変数なら、最初に0を入れます。
整数型: sum
sum ← 0
個数を数える変数でも、最初に0を入れることがあります。
整数型: count
count ← 0
このようにしておくと、あとから sum ← sum + score のような計算をするときに、未定義のまま使うことを防げます。
ここでは、言葉を難しく覚えなくても大丈夫です。 まずは、「使う前に値を入れる」と考えておきましょう。
未定義で大切なのは、使う前に値を入れることです。
変数を見たら、次のように確認しましょう。
擬似言語を読むときは、変数の名前だけでなく、今その変数に何が入っているかを追う必要があります。
未定義は、プログラムのミスを見つけるうえでも大切な考え方です。 シミュレーターで実行しながら、どのタイミングで値が決まるのかを確認していきましょう。
まずは、未定義は変数にまだ値が入っていない状態と覚えておきましょう。