俺が仕事をしていてムカつくことの一つは、契約プログラミングと言う概念があまりにも広まっていないことである。例えば今俺が遊んでいる「世界樹の迷宮2」では、自分のパラメータを上げなければいけないところで敵のパラメータが上がっているとか、本来とは逆の効果をもたらすというバグがいくつか報告されている。 DS での開発環境やアトラスでの開発手法についてはさっぱり知らないが、とにかくこういった問題を起こさないためにも「契約」という概念は有効だ。
先に出した例でいうと、パラメータを上げるカテゴリのスキルを使った場合、その前後でパラメータが下がっていたら明らかにおかしい。そして当然ながら、味方にかけるスキルで敵が強化されていたらおかしい。こういったアサーションは多少パラノイア気味にでも行うべきで、特に使われるデータが膨大かつ複雑で単体テストレベルでは漏れが確実にありそうなプログラムの場合、契約という形で表明をすることで異常なデータの検出や仕様を整理することによるテストの品質の向上という利益を得ることが出来る。
もっとも契約プログラミングを実装してる言語はそれほど多くなくて (Eiffel と D ぐらいか、有名なのは)、そのせいで広まっていないってのもあるだろう。 Python なんかは高階関数と __setattr__/__getattribute__ なんかで事実上の契約プログラミングが出来るけど、まあ言語の機能に含まれているに越したことはないからな。
というか俺に言わせりゃプログラミング言語の「型」だって契約の一種で、俺が静的型システムの方が好きな理由はそこにある。ただ Java だの C だのといった言語じゃ面倒くさい上に融通が効かなくて、あんまりよく調べてないけど OCaml の型システムが俺の求めているものかもしれない。でもちょっと触ってみた感じ、 OCaml って文法とかが変態だったんだよな。
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。