アカウント名:
パスワード:
おせっかいモードで補足すると、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系言語をどうぞ。:-)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日本発のオープンソースソフトウェアは42件 -- ある官僚
逃げ場が... (スコア:1)
なんだか逃げ場がない世間の様で、
息が詰まりそうです...
#アレ? ひょっとして俺、疲れてる?
-- LightSpeed-J
Re: (スコア:1)
ML系言語に逃げちゃいなYo! (スコア:2, 参考になる)
おせっかいモードで補足すると、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系言語をどうぞ。:-)