思索

拡張の技法・その2

規則は強い方がいいが、拡張できるよう工夫する必要があるという話のつづきです。

コンピュータのプログラミングの基本の一つに「繰り返し」があります。例えばディスプレイをみていて、何も変化がないとしたら、それは「変化の処理をしていない」というより「同じものを表示するという作業を繰り返している」と表現するのが近いといっていいでしょう。今度は時間を表示するアプリを思い浮かべてください。秒の単位まで表示させたいなら、1秒より短い間隔で(あまり正確な表現ではありませんが)表示の更新を繰り返せばいいですね。そこでこう考えます。

「表示の内容は違うけど、表示を更新する作業はいつも同じだから、そこは繰り返すことにして一連のコードを書こう」と。そうして与えられた変数の値を読み込んで表示を更新するメソッドを定義して、時刻が入っている変数(オブジェクト)に添えると、表示を更新するメソッドを持ったオブジェクトを作ることができます。メソッドを定義するコードは一カ所にだけ書かれていればよく、表示を更新したいところでこのオブジェクトを呼び出せば、表示の更新作業が繰り返せるというわけです。

このオブジェクトにさらにメソッドを定義して添えることもできます。例えば「分」の内容が「00」である場合に音を鳴らすというメソッドを定義して添えると、時刻の表示を更新しながら毎正時に時報を鳴らすことができます。このようにして、定義は一度だけすっきり書いておいて、それらの組み合わせでさせたい作業を記述していくという作業がしやすい仕組みになっています。オブジェクトをメソッドで拡張していくわけです。

僕はまだほんの数行Rubyのコードを書いてみただけですのでRubyについては今回はこの程度にとどめますが、僕がRubyに触発されたのはこの「オブジェクトを拡張していくことで、書くときには楽しく、後で読んでも分かりやすいコードになる」という点です。そしてこの技法は、いろんな情報を整理整頓するのにも都合がいいのではないかと思ったのです。

PCのハードディスクの中にみなさんいろんなファイルをしまってあると思います。フォルダーにはフォルダーとファイルをしまうことができる。フォルダやファイルには名前を付けることができるが、そのフォルダの中のファイル同士では同じ名前はつけない。フォルダに同じ名前をつけない、という簡単な規則でかなりいい線まで整頓できます。階層化ディレクトリというファイルシステムです。しかしそれでもタグ付けで整理したいという方略もあって両方実装しているOSもありますが、この両方を使ってもなお、なかなか満足な感じが僕はしなかったのです。それは、ファイルシステムの問題ではなく、僕がどのようにフォルダを増やしていっているのかに問題があったのです。

 フォルダやファイルの整理整頓に満足していなかったのは、見つけたいものを後になってから見つけるのが簡単でなかったからです。それは、ファイルやフォルダを新規に作るときの規則をきちんと規定していなかったからなのです。ファイルやフォルダが、どうなったらどう分ける、まとめる、そういう方針がなかったから、後の参照の手がかりがとても少ないやり方をしていたわけです。先に損益計算書と貸借対照表の例を出したのも、あの書類は、書式自体が書類の持っている意味の世界を強く規定している。だから複式簿記を知っている人なら、誰でも意味が分かるようになっているのです。書式が読み方をアフォードしている、などというとちょっと大きく出過ぎですが、そんな感じです。

そういうわけで、次回は僕が現在どのようにMacの中のファイルやフォルダを整頓しているかを紹介しつつ、拡張の技法について話を続けたいと思います。つづく。