カレンダー

2019/12
1011121314
15161718192021
22232425262728
293031    
       

広告

Twitter

記事検索

ランダムボタン

グルグル回るスクリプト

by 唐草 [2019/10/18]



 プログラムを理解するためには、3つの制御構造を理解していれば十分だ。順次構造、選択構造、反復構造の3つ。分かりやすく言い換えると「順番に動かせ」、「どっちか選べ」、「繰り返せ」という感じ。たったこれだけなのである。オフィスソフトもゲームもWebサーバもデータベースも何もかもが、この3つの制御構造で表すことができる。
 だからプログラムを書くときは、実行したい処理を表現するのにどの制御構造を用いるのが適切なのかを考えることになる。プログラム=数学というイメージが強いと、処理の表現方法は数学の計算問題のように常に一意に定まるようなイメージがあるかもしれない。でも、そうじゃない。むしろプログラムなんて言うものは、別解が山ほどある証明問題のようなものである。プログラマーが10人いれば、良いものから悪いものまで4通りぐらいのアプローチが提唱されることだろう。
 昨日からぼくは、勤怠管理ツールのようなWebアプリケーションを書いていた。ざっくり言うと毎週どのぐらいの活動をしたかを一覧表にするソフトである。処理の中心は、データベースから読み込んだ活動履歴を週区切りのカレンダーに並べていくことである。
 この処理をこなすのに必要な制御構造は反復だ。エクセルの行を先頭から1行ずつすべて読んでいくような繰り返しである。動作の中心となるこの部分は、教科書に掲載されていそうなほどありがちな処理。なので迷うことなく設計できた。しかし、これだけで完成という訳ではない。次に条件に合わせて表示したり、しなかったりを選択していく部分を書く必要がある。この部分は今回の案件特有の要素だ。プログラムの教科書を開いても、そのものズバリの回答例は見つからないだろう。こういうところにプログラマーの技量とセンスが現れるのである。
 今朝、昨日の自分が書いたコードを見て絶句した。
 どう贔屓目に見ても、「私は馬鹿です」と太字で書いてあるようにしか見えないコードが書かれていた。
 順次構造で前から順番に動かせば良い部分に反復を使っていた。掛け算を知らない小学生が頑張って何度も足し算をしているような頭の悪い処理だった。小学生なら微笑ましいが、大人がやっているかと思うと目を覆いたくなる。別のところでは、反復構造でかけば単純な繰り返しになる部分を、あみだくじのように複雑な選択構造で書きあげていた。昨日のぼくが書いたのは、まっすぐ進めばいいところでグルグル回って進み、転がせば簡単に動く車輪を無理やり引きずったかのようなプログラムである。
 3つの構造それぞれはとても単純だが、使う側の頭が足りないと勝手に複雑になっていくという良い見本である。