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

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

  • by Anonymous Coward
    NULLがない場合は、何で初期化したらいいんでしょうか?

    # え?NULLがあっても、NULLなんかでは初期化しませんか。そうなんですか。
    • by Anonymous Coward on 2009年03月05日 21時26分 (#1525699)
      エラーや脆弱性、システムクラッシュの原因とならない安全なオブジェクトがあればいいんじゃないかなぁ。つかどうしてないんだろ。
      参照はがしてもSEGVらず、数値として評価したら0、文字列として評価したら空文字、代入しても何も起きず、関数としてコールしたらすぐ戻り値0で帰ってきて、パス名とかネットワークアドレスとして開いたら/dev/nullみたいな。
      親コメント
      • Re:NULLがない世界 (スコア:2, 参考になる)

        by Anonymous Coward on 2009年03月06日 1時16分 (#1525828)

        >あればいいんじゃないかなぁ。つかどうしてないんだろ。

        それれが有る言語を「高級言語」と呼びます。

        いささか乱暴な言い方ですが、高級とはおおむねそういう方角を向くことを言います。

        一方で、そういうモノを見事に動かすには結構な実行時コストがかかるわけで、
        そのコストを嫌って「自己責任でやってね」という方針にしてるのが「低級言語」。

        まず何が起きるか判ったもんじゃないC言語のレベル。
        Javaはもう少し上のレベルで、未定義とまでは言わないものの、すごく扱いづらい挙動をするだけ。
        Rubyは更に少し上のレベルで、nilもまたオブジェクトであり、かつ振る舞いが好きなようにカスタマイズできる。method_missingとか使えば「状況ごとに」振る舞いを変えることも出来る。

        まあいろいろな高級度にそれぞれの言語が位置しているわけです。

        親コメント
      • by Anonymous Coward on 2009年03月05日 22時48分 (#1525741)
        Nullオブジェクトパターンってのは正にそのためのものかと。
        言語標準として付いて欲しいという話かもしれませんが。理想のnullってのはケースバイケースなので難しいかも。
        親コメント
      • by Anonymous Coward

        参照はがしてもSEGVらず、数値として評価したら0、文字列として評価したら空文字、代入しても何も起きず、関数としてコールしたらすぐ戻り値0で帰ってきて、パス名とかネットワークアドレスとして開いたら/dev/null

        はたしてそれは安全でしょうか。

        操作するべき対象ではないものを操作しても、
        一見正しく動作しているかのように動作してしまい、
        しかもその動作は決して本来の期待された動作ではないなんて。

        いったいどれほど紛らわしく、発見し難い欠陥となることやら。

        • by Anonymous Coward
          少なくともNULLの参照剥しが未定義な世界よりは。
          だからCより改善されたいくつかの言語は、自動変数を0なりnullなり初期化したり、nullオブジェクトにメッセージを送ったときの挙動を言語仕様で規定したりしているわけで。
        • by Anonymous Coward
          Novaの0番地には0が入っていて、0はJUMP 0命令だったから、あれはすごく便利だった。
      • by Anonymous Coward

        つObjective-C

      • by Anonymous Coward

        本質的にバグならなんとなく動くより
        その場でクラッシュしたほうが幾分マシ。

犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー

処理中...