パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

null参照の考案は10億ドル単位の過ち?」記事へのコメント

  • nullがない世界は、
    なんだか逃げ場がない世間の様で、
    息が詰まりそうです...

    #アレ? ひょっとして俺、疲れてる?
    --
    -- LightSpeed-J
    • by eldesh (33332) on 2009年03月05日 21時28分 (#1525701) 日記
      つML
      親コメント
      • by kr (10950) on 2009年03月06日 0時41分 (#1525816) 日記

        おせっかいモードで補足すると、ML系の言語では、 「決してnullにならない」型と、 「nullになり得る(つまり値が無い場合もある)」型を使い分けることができる、 という話ですね。

        Standard MLの option型 [standardml.org]や、 HaskellのMaybe型 [haskell.org]が、 「値が無い場合もある」型として使われます。 コンパイル時の型チェックにより、 「場合分けして、値が有る場合」という場所でしか直接の値を参照できないので、 値が無いのに間違えて値を取り出そうとすることはありません。
        # 一応「値があればそれを取り出し、値が無い場合は例外を発生せよ」というライブラリ関数も用意されているので、
        # Javaのぬるぽ^H^H^HNullPointerException [sun.co.jp]と同様の動作をさせることも選べます。

        ML系言語に馴染みがない人のために、 比較的メジャーな(?)命令型言語から似たものを探すと、 C#の nullable [microsoft.com]型のようなものを連想すると分かりやすいかもしれません。

        option型やMaybe型は、参照の際に、 値が無い場合についてのケアをしないと、 必ずコンパイラに怒られるようになっています。 だから安全、というわけですが、 とはいえ、値を使う度に場合分けをするのも面倒です。 そこで例えばC#では、 nullableに対する演算 [microsoft.com]を別途定義することで、 面倒な場合分け無しに、ちょっとしたコードを書ける工夫がしてあります。 Haskellでは、これをもっと一般化させていて、Maybeは Monad [sampou.org]としても使えるために、かなり複雑な計算でも、 驚くほどすっきりと書けたりします(うまくMonadで書ければ、ですが)。

        ということで、nullにお悩みなら、ML系言語をどうぞ。:-)

        親コメント

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...