「パンツ何色?」という質問への違和感への違和感について

こういうツイートを見かけた

この情報系の人の意見には僕は逆に違和感がある。結論を先にいうとパンツが何色かというプロパティへのアクセス権限よりもパンツがあるかないかのほうが必要となる権限が高く、いきなりパンツの色を聞くということが成功する場合でも、パンツがあるかないかを聞くことについてはセキュリティ違反が発生する可能性が高いからだ。


彼の想定では会話をして「パンツ何色?」という質問をすることは下記のようなインタフェースを用いてアクセスするようになっているのだろう。例えば50代のITジャーナリストが20歳程度の女子に話をしている想定でJava風のコードを書くと下記のような感じである。

class Yoh { 
  void talkWithNekomiku(Nekomiku nk) {
    Psnties pants = nk.getCurrentPanties();
    Color color = pants.getColor();
          //その後colorを使った処理が続く
  }
}

このコードでは確かにgetPants()でエラーが出た場合、あるいはパンツがなくてpantsがnullとなった場合にエラーが発生してしまう。なのでgetCurrentPanties()の戻り値のnullチェックをすべきであるということだ。
しかしここで他の人も居るような場所でPantiesオブジェクトへの参照をYohクラスに渡してしまうようなことが普通にあり得るだろうか? いやない。なぜならPantiesオブジェクトは単なるパンツであってセキュリティがないからだ。一旦Pantiesオブジェクトへの参照を渡してしまうと、それへのアクセスはgetColor()だけでなくgetType()とかgetTexture()とかgetThickness()などいろいろなメソッドの呼び出しを許してしまうからだ。
要するに、たいていの女子にとって「パンツ何色?」と聞かれるよりもパンツオブジェクトのプロパティへのアクセスを許すことのほうが要求セキュリティレベルが高い質問なのだ。もし実際にパンツはいてないケースがあったとして、それを正直に答えるだろうか? 適当にごまかすのではないか?

もし僕が若い女子の立場に立ってgetCurrentPanties()メソッドを実装するならば下記のようにするだろう。常にダミーのピンクのパンティへの参照を返すようにするのだ。

  Panties getCurrentPanties() {
    return new dummyPanties(Color.Pink);
  }

この結果、「パンツ何色?」という芸風を実行するために冒頭のようなインタフェースを通してパンツオブジェクトのプロパティにアクセスする場合には、本来「色くらいなら教えてもいいかな~?」みたいに思われているようなシチュエーションであっても常に固定値が返ってくるという残念な結果となってしまうのである。


僕が推奨するインタフェースを使ったコードは下記のようなもので、もう単純にそのままである。パンツが存在しない場合でもgetCurrentPantiesColor()がそれなりの値を返してくれることを期待している(普通はそう作るはずだ)。

void talkWithNekomiku(Nekomiku nk) {
  Color color = nk.getCurrentPantiesColor();
        //その後colorを使った処理が続く
}

責務が分割されていないとかそういう話はあるのかもしれないが、基本的に自分のパンツにどれくらいのアクセスを許すかを判断するのはパンツオブジェクトの責務ではなくパンツを履いている人間の責務である。だからこの一見何も考えていないようなインタフェースが実は正しかったりするのだ。


僕がこれまで経験してきたプロジェクトでもこれと似たような感じの、「一見あまりに何も考えてなさすぎなめちゃくちゃ個別のケースのためだけに存在するAPIで、もっと汎用化したAPIの組み合わせで実現すべきだと思われるんだけど、実際には熟考の末にそれが必要だから作られたものだった」みたいなケースがたまにあるので、注意が必要である。


なおこのエントリを書くにあたってぱんつは1枚でもpantiesと書くことを知ったことが一番勉強になりました。