プログラミングを学び始めたばかりの人が書くコードには、分かりやすい欠点がいくつかあります。コードにインデントがされていないことが多く、コメントもほとんどありません。VB6 のような言語から始めた場合は、変数名や型を宣言しないという欠点もあるでしょう。こうしたコードも動くには動きますが、保守するのはとても大変です。この記事は私個人の小さな意見にすぎませんので、間違っている点があればご指摘いただけると幸いです。

1. 変数と型を宣言することの重要性

まず、変数と型を宣言することの重要性についてお話しします。ここで VB の話になります。初心者の多くは VB6 か VB.NET から学びます。VB をどう説明すればいいでしょうか。実は、初心者がすばやくプログラミングの世界に入れるように作られた、とても取り組みやすい言語です。つまり、シンプルであることが特徴です。VB はシンプルな分、いくつかの点で厳密ではありません。たとえば VB6 では変数を宣言することが強制されず、宣言しなくても変数をそのまま使えます。これは VB だけの話ではなく、PHP や JavaScript も同じです。VB.NET では変数の宣言が必要になり、少し進歩しました。しかし、型の宣言までは要求されません。では、どのような結果になるのでしょうか。VB6 では、変数の型を宣言しなかったり、そもそも変数を宣言しなかったりすると、システムが自動的にその変数を Variant として扱います(VB.NET では未宣言の変数は自動的に Object になります)。そして Variant は 16 バイトのメモリを消費します。16 バイトと聞くと大したことはないように思えます。今どきのメモリは 2GB からが当たり前ですから。そこで相対的に比べてみましょう。次の 2 つのコードをご覧ください。

1. 型を宣言しない場合

Dim x = 5
Dim y = 10
print( x + y)

2. 型を宣言する場合

Dim x As Byte= 5
Dim y As Byte= 10
print( x + y)

どちらのコードも最終的には正しい結果の 15 が得られます。ただし、これは表面上のことにすぎません。実際には、型を宣言していないコードは 32 バイトのメモリを使い、変数を Byte として宣言したコードはわずか 2 バイトしか使いません。(ここでは変数の型だけを考えており、それ以外は含めていません。)両者を比べると、メモリ使用量には 16 倍もの差があります。恐ろしいですよね。これが適切な変数の型を選ぶことのメリットです。しかも今回は単純な足し算なので、もともとのメモリ使用量も少ないのです。もしブラウザのような大規模なプロジェクトを書いているなら、変数を宣言しているかどうかが、ブラウザの性能を大きく左右する要因になり得ます。

VB の変数について詳しくはこちらをご覧ください:http://goo.gl/kwl3T

↑↑Byte は 1 バイトしか使いません

↓↓Object は 4 バイト、VB6 の Variant は 16 バイトを使います

メモリを多く使うことは、まだ小さな欠点の部類です。変数を宣言しないと、コードがミスをしやすくなったり、バグが隠れたりすることも多くあります。プログラミングを学んだことがある人なら、変数の型にはそれぞれ特性があることをご存じでしょう。たとえば Integer は整数しか格納できません。Integer 型の変数に小数を入れると、システムが自動的に処理してくれます。また、数値が大きすぎると Integer では格納できないため、Long のような容量の大きい型が必要になります。たとえば為替レートを計算するプログラムを書いているとします。為替レートは通常、小数点以下の 2 桁目や 3 桁目まで扱います。ここで整数を使って計算すると、最初の数値は 1 程度しか違わないかもしれません。しかし、それを為替レートに換算すると、その差は数千、数万、あるいは数百万にもなります。型や変数の定義は、くれぐれも軽く考えてはいけません!

P.S. 変数や型を強制しないという欠点以外にも、VB には多くの欠点があります。しかし、この記事は VB を批判することが目的ではなく、変数を宣言しないことの危険性を説明するものです。正直に言えば、VB は初心者にとってとても良い言語です。

2. インデントとコメントの重要性

先ほどお話しした型や変数の重要性とは違い、インデントやコメントの良し悪しはプログラムが動くかどうかには影響しません。しかし、一人前のプログラマーかどうかには影響します。あまり大げさに言うつもりはありません。多くの人はテストや学業を乗り切るためだけにプログラミングを学んでいるからです。ここで、台北商業技術学院のリン先生が言ったことに、思わず賛成したくなりました。「我が校の情報管理学科の学生が、インデントのないコードを提出したら、単位は与えない」。あの学校の先生はおそらく理解があり、同時に厳しいのでしょう。しかし、一般の高校や専門学校の先生も、インデントのないコードを見るだけでかなり減点していることをご存じでしょうか。

ここまでインデントやコメントがどれほど重要かを繰り返し話してきましたが、その理由をまだきちんと説明していませんでした。この段落で実際に説明します~ まず、次の 2 つのコードをご覧ください。

1. インデントなし

If x > 2 Then
If x > 5 Then
Print("x>5")
End If
Print("5>x>2")
End If

2. インデントあり

If x > 2 Then
	If x > 5 Then
		Print("x>5")
	End If
	Print("5>x>2")
End If

エラーが起きたとき、問題を見つけやすいのは、インデントのない 1 つ目のコードでしょうか、それともインデントのある 2 つ目のコードでしょうか。説明するまでもなく、お分かりいただけると思います。これがインデントの重要性です。コードのどこに誤りがあるかをすばやく見つけられるようになります。実際、多くのクラスメイトが、インデントをせずにとても乱雑なコードを書いています。そしてエラーが起きると、どこが間違っているのかを何度も他の人に聞いています。しかし、手伝ってくれる側もとても大変だということに気づいていません。目がとても疲れるのです。ですから、自分のためにも他の人のためにも、どうかコードにインデントをしてください~

先ほど、インデントのない例のコードを作っているときに、VS シリーズの IDE は自動でインデントしてくれることに気づきました。そのため、結局メモ帳で偽のコードを書くことになりました。VS はインデントをきれいにしてくれますが、残念ながら高校ではたいてい VB6 を教えており、VB6 は自動インデントをしてくれません。たとえ IDE が自動でインデントしてくれたとしても、それを当たり前だと思ってはいけません。自分自身でその習慣を身につける必要があります。

インデントの重要性については以上です。要するに、デバッグがしやすくなり、コードの可読性も上がるということです。コメントも同じ役割を果たします。ここでもう一度、あの先生の言葉を引用します。「卒業して社会に出たら、ほとんどの場合、まったく新しいプログラムを書くのではなく、他の人が書いたプログラムを修正することになる」。これはどういう意味でしょうか。私の口癖でもありますが、プログラミングを学んだことがある人なら、ひとつの機能を多くの異なるコードで実現できることをご存じでしょう。たとえば等差数列を計算したいとします。ループを使って一つずつ足していく人もいれば、賢い人は公式を使って解きます。このとき、コードにコメントがなければ、そのコードを読む人はとても疲れてしまいます。何をしているのかを理解するのに、しばらく時間がかかります。中には、まったく理解できない人や、理解しようとさえしない人もいるでしょう。そして、そのコードを一、二年放置してから再び開いたとき、自分の考えさえ理解できないのではないでしょうか。

「先人が木を植え、後人が涼を得る」という言葉があります。今、コードのコメントを書くのに三十分余計にかければ、後でそのコードを使う人は、二時間、三時間、あるいはそれ以上の時間を節約できます。また、自分のコードを修正するときにも、まず元のコードを理解するのに多くの時間を使わずに、作業を続けられます。他人のためにもなり、自分のためにもなる。こんなにいいことを、やらない手はありませんよね。

まとめ:

良いコードを書くには、ここまでに述べたこと以上のものが必要です。しかし、ここまでの内容は最も基本的なものにすぎません。基本すらできないのに、もっと深い話をする必要があるでしょうか。時間ができたら、自分なりの考えをもう少し共有したいと思います。ただ正直に言うと、これらはよく言われる当たり前のことで、多くの人が聞いたことがあるはずです。それでも、実際にできている人は多くありません。成績がこれを求めていないため、高校や専門学校のプログラミングの授業では、コードが動きさえすれば上出来とされています。北商のように、整形されていないコードは単位を与えない、という学校はほとんどありません。社会に出て、周囲から冷たい目で見られてはじめて、これらのことをしっかりやるようになる……。これはすべて、経験と訓練を通してしか分からないことなのです。