プログラミング コラム

変数の学び方

プログラミングにおいて、変数は基礎中の基礎と言えるでしょう。
演算結果や、何かから読み込んだデータを保存する箱のような存在です。

書き方も簡単で、CやJavaであれば変数名と型を合わせて宣言しますし、
その宣言さえ不要な言語もあります。

変数はその手軽さもあって、少しプログラミングに慣れてくると無意識に使うようになります。
慣れることはとても良いことなのですが「変数とはそんなもんだ」と、そのままにしておくとレベルアップの機会を逃してしまうかもしれません。

当校の授業では、変数の書き方や仕組みをお話しした後、「本当に理解したと言えるのはどういうことか?」も伝えるようにしています。

例えば次のようなコードがあった場合(C言語で記述しています)
int a;
int b;
int c;
int d;
int num1 = 10;
int num2 = 2;

a = num1 + num2;
b = num1 - num2;
c = num1 * num2;
d = num1 / num2;

printf("%d\n" , a);
printf("%d\n" , b);
printf("%d\n" , c);
printf("%d\n" , d);

少し強引な例ですが、上記の場合 a,b,c,d の変数を使わなくても同じことが実現できます。

int num1 = 10;
int num2 = 2;

printf("%d\n" , num1 + num2);
printf("%d\n" , num1 - num2);
printf("%d\n" , num1 * num2);
printf("%d\n" , num1 / num2);
これで四つの変数が削減できました。
変数を使えるようになった頃は、何でも変数に代入する癖がついてしまう方も多いです。
簡単なプログラムであれば問題ないようにも見えますが、実務で同じことをしてしまうと膨大な数の変数を宣言してしまい、
ソースコードが肥大化し、可読性が損なわれてしまいます。
では、変数は使わない方が良いのでしょうか?

次の例を見てみましょう。
int a = 10;
int b = 20;
int c = 4;
int d = 2;

int flag = 0;

printf("%d\n" , (a + b * c / d) );

if( flag )
{
 printf("%d\n" , (a + b * c / d) );
}

printf("%d\n" , (a + b * c / d) );
printf("%d\n" , (a + b * c / d) );
四つの値を使った何らかの計算式があり、計算結果をプログラムの各所で使用しています。
この場合、計算式に変更があれば修正が困難になり、不具合の元にもなるでしょう。

そこで計算結果を一旦変数に代入し、その変数を使い回します。
int a = 10;
int b = 20;
int c = 4;
int d = 2;

int flag = 0;
int value = (a + b * c / d);

printf("%d\n" , value );

if( flag )
{
 printf("%d\n" , value );
}

printf("%d\n" , value );
printf("%d\n" , value );

1つの変数を追加することで、ソースコードの可読性も向上し、計算式に変更があった場合でも容易に対応できるようになりました。

では結局、変数は使うべきか?使わないべきか?

私は「バランス」が重要と考えています。

変数に限らず、プログラミングにおいて極端な考え方は避けるべきです。
「〇〇の時は××でよい」と短絡的に考えてしまうと、思考の幅が狭くなり、柔軟な設計ができなくなってきます。

完全に正しい答えは無く、「〇〇の時は××はよいが□□はダメ」のように、常にメリットとデメリットがあると考えます。

今 宣言しようとしているその変数は本当に必要なものなのか?
宣言すると、どんなメリットがあるのか?
その変数を使う明確な理由がないのであれば、使用する必要も無いでしょう。

その「判断力」こそが変数を理解することだと思います。
written by Tomoji Onishi / 2022.10.13
コラム一覧