2012年10月21日日曜日

私が他所のクラス

Clip to Evernote
こちらの記事を読みました(ありがとうございます)。

R-style » 「仕事術のiPhoneアプリっぽさ」について

記事の内容についてはぜひリンク先をチェックしていただきたいと思います。
本エントリで取り上げたいのは、上の記事の内容とはあまり関係なく、そこで現れていたある一文についてです。
引用いたします。
仕事術をiPhoneアプリに類推する(※)と、次のようなことが思い浮かびます。
※関数っぽく表記すると、類推(“仕事術”,”iPhoneアプリ”);
なるほど、String二つを引数にとるような、「類推」メソッドを呼んでいるわけです。返り値(リターン)については、とりあえずここでは明示されていません。

いま、私は「類推」メソッドが定義されているものとは別のクラス(モジュール)だとします。
つまり、「類推」を使うには、定義されたクラスをimportしてくるなどする必要があるわけです。

今回はそんな話です。


別のモジュール


現実の行動としての「類推する」に上で述べたような様子を当てはめてみると、非常に興味深い話が思いつきます。
こればかりは、実際に「類推する」ことの経験がないと説明しにくいのですが、たぶん、そのような方はあまりいらっしゃらないでしょうから、そんな説明でいきます。

私が「類推」メソッドが定義されているのとは別のクラスだった場合、「類推」が実際に内部で何をしているかは見えません。わかるのは、String二つを渡すと何かを返してくれることだけです。
オブジェクト指向プログラミングの言葉では、これを「カプセル化」などと表したりします。これはあちこちで出てくる重要な概念ですので、「カプセル化」以外にも似た単語を目にするかもしれませんし、あるいは「カプセル化」の定義はそんなものではない、といった話もあるかもしれませんが、とりあえず本エントリでは「カプセル化」で統一することにします。

ちなみに、私は社会の発展の歴史はカプセル化の歴史だと思っているのですが、この主張は極論過ぎてあまり面白くないので、いまのところ、それについて深く考えたりどうこうしたりする予定はありません。

話が逸れました。「カプセル化」、つまり他所からは中身が見えないことの話です。

そして、私たちが実際に「類推」と呼ばれる行為をするときも同様、その中で何が行われているかを見ることはできません。「何かを何かに(先の例では仕事術をiPhoneアプリに)類推しよう」と思ったとき、どこがどうなって類推結果が得られているのかは、普通はわからないのです。
ここでわかるのは、「何かを何かに」の「何か」を決めると、ある類推結果が得られることだけです。


化学反応


それから、こちらの記事を読みました。

外向的な人優位の中で、内向的な人が渡り合っていくための、小さな工夫と考え方 #tokyohack010 | Find the meaning of my life.

こちらも、本エントリでその内容まで踏み込むことはしませんが、ぜひお読みいただきたい素晴らしい記事です。

私が取り上げたいのは、記事内の以下の文章についてです。
引用いたします。
フラスコに同じ薬品をいくら入れても化学反応は起きません。熱を加えたり、異なる薬品を入れて初めて化学反応というのは起こるものです。
なるほどと思いました。もちろん、同じ薬品であっても、それを過剰に入れることで別の反応が起きることは多々ありますが、そういった話は置いておきます。

ここで、化学反応と呼ばれるものについてもう少し見てみます。
上の引用文のように、日常生活における比喩として化学反応の言葉が使われる場合には、「別のものを複数持ってきて混ぜると、何か思いもよらないものが出てくる」といった雰囲気があるように思います。音楽CDのディスクレビュー記事などを思い出してみるとわかりやすいでしょう。

ですが、実際の化学反応では、なにもそういった不思議なことが起きているわけではありません。
反応の前後では、全体の質量も電荷もその他諸々も大抵が一定に保存されますし、変化する部分も、元の化学式から「これは弱酸の遊離だな」などといってきちんと計算できます。
その計算が複雑で大変であるような状況はあるにせよ、得体の知れないことが起きているわけではないのです。

ただし、これは「化学反応」が定義されたクラスの内部にアクセスできる場合での話です。
もし、私が「化学反応」をimportして使う立場のクラスだった場合、やはりそこでは得体の知れないことが起きています。適当な薬品を複数渡すと、全く別の薬品が返されてくるわけです。そこで保証されているのは、返されてくるものは自分が渡したものに依存して決まる、ということだけなのです。

翻って、この「化学反応」が日常生活の比喩である状況に再度目を向けてみます。

私はやはり「化学反応」の内部で起きていることはわかりません。化学反応はカプセル化されているわけです。わかるのは、自分が渡したものによって、返されるものが決まることだけです。

しかし、このことは、一つ悪くない発想に私を行き当たらせます。

「化学反応」メソッドが有用であることは先人たちの様子から明らかなわけですので、もしそれによって良いリターンが得られなくても、それは単に渡すものが良くなかっただけになります。
与えられたメソッド内部の出来が悪いとか、そういったことは考える必要はありません。そもそも「化学反応」も「類推」も他所のクラスのものですので、どうしようもないのです。
(継承してくることはできるかもしれません。)

ですので、自分の使っている「類推」や「化学反応」は駄目だ、と嘆く必要はありません。渡すものの選択に、工夫する余地が十分あるわけです。
きっと、良いリターンを得られるインプットは、どこかで見つかるはずなのです。


終わりに


本文中に、「極論過ぎて面白くない」とのことを書きました。

書いてから気づきましたが、私は、極論過ぎるものを面白くないと感じるようです。
これはどのような現象なのでしょうか。不思議です。

そうすると、「面白い」も他所のクラスで定義されたメソッドということになります。