言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

紐のほどき方

またダラダラと考えを書く。プログラムを作っていて、これはほんとこんがらがった紐をほどいているような気分になる事がよくある。特に他人の書いたサンプルコードを自分のコードに混ぜる時に、ちょっとづつコードを壊さないよう、必要な部分だけ残して、不要な物は消してしまったり単純化したり、長い関数を分けたり、グローバル変数をオブジェクトに入れたり。上手くやると、コードがすっきりすると同時に、サンプルコードの背後にあった作者の意図が見えてくる。

別の話。アランさんとの会話で昔あったのが、変数は箱じゃなくてスライダーのようであるべきだという主張。特に Smalltalk のような変数に型の無い言語の場合、色んな物を色んな所で代入してしまうとよからぬバグの温床となる。そうじゃなくて、変数にはメッセージ経由でしかアクセスしないようにして、値がいくら変わってもスライダーならスライダーという性質はずっと保ったままでいるべきだという話。

今日英会話の帰りに立ち読みしていて、圏論の教科書を探したんだけどそれは無くて、群論ならあって、似たような名前だからそれを買ったんだけどやっぱり圏論の話は全然乗ってなくて、でも群論がプログラムに役立ちそうだという事が分かった。と言うのも群論の対象というのが時計の針のように、演算の結果が最初の場所からはみ出ないような物を扱う学問で、最初の場所からはみ出ないためには何が必要かと書いてある。こういう物がプログラムのような漠然とした物に応用出来るのかしらないけど、鶴亀算が方程式で簡単に解けるように、こんがらがったプログラムも決まった手順でスルスルとまっすぐになれば良いなと思う。もう一つ変数のスライダーの話はもっと直接的で、もしも変数とメソッドが群の形をしていたら、結果の範囲が保証出来るのみならず、三次元プログラムの行列演算のように分かっている部分からあらかじめ計算しておくような事が出来るので、changed と update が連鎖するような MVC プログラムや、ドラッグすると制約を保ったまま図形が変形するレイアウト用プログラムなんかで威力を発揮するのでは無いかと思う。

などと数学の本をいつもどおり挿絵だけ見ていい加減な事をピュアな気分で記す。