プログラムというものは、基本はまずちゃんと動くということが大事である。速く動くとかそういうことは二の次である。あるいは、単に速く動くということよりもマナーに沿って書いてあるということの方が大事かもしれない。
そうではあるのだが、どうかなあと思うことはある。昨今のフレームワークでは、
object->getSomeColumn();
みたいな関数が用意されていて、常に組み込みの関数を使うのが当たり前みたいになっている。そうする方が安全なだし、コーディングもわかりやすいかもしれない。しかし、だ。
たとえばExcel VBAみたいなもので、セルのA1に何らかの変数を演算の上格納するとする。そのとき、
sht.Range(“A1”).Formula=0
For i = 1 to 10
sht.Range(“A1”).Formula = sht.Range(“A1”).Formula + 1
Next
こんなコードを普通は書かないと思うのだ。普通なら
v=0
For i = 1 to 10
v = v + 1
Next
sht.Range(“A1”).Formula = v
と書くだろう。
sht.Range(“A1”).Formula = 1
みたいなコードを書いたとき、実はRangeというメソッドは一種の関数であって、”A1″という文字列を受け取ってそのセルを特定するとか、値を代入すれば画面にそれを表示させてディスプレイのハードウェアとやり取りをしているとか、エクセル内部でのいろいろな処理が進行している。組み込み関数を呼び出すということは、その間で何が起こっているのか全くブラックボックスである。コンピュータの処理として、最終的には100も200も数千も処理をしているのかもしれない。あるいは単純な処理でも、サーバといちいちやり取りしていて、全然レスポンスが悪いかもしれない。
それに対して、足し算や引き算、インクリメント、ビット演算、ループ、こうした変数を立てて手書きで書くコードの部分というのは、コンピュータの処理として割と書いたままの処理をしている。そうした部分は、大体コードを書いた人が意図する速度で動きます。つまり、「あれ、なんでこんな反応が悪いんだろ」ということは起こりにくい。
それで、たとえばphpなんかで書くときに、細かく変数を立てないで毎度組み込み関数を使って値を呼び出したりすることは最近いろいろあるのだけど、それって本当に正しいの?と思うことはあります。