nullableでない参照型が非常に多くのバグを解決し、プログラミングを非常に簡単にする方法について人々が話し続けることを続けます。 nullの作成者であっても、彼はbillion dollar mistakeと呼ばれ、Spec#は、この問題を解決するためのnull不可能な型を導入しました。nullableでない型の議論について
編集: Spec#についてのコメントは無視してください。私はそれがどのように機能するのか誤解しました。
EDIT 2:私は間違った人と話をしなければならない、私は本当に、だから私は少数派であること、推測:-)
と主張する誰かを期待していました私は間違っているが、なぜこの議論にメリットがあるのか理解できない。私はバグ発見ツールとしてnullを参照しています。以下を考慮してください。
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM!アクセス違反。誰かがc
を初期化するのを忘れていました。
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
おっと:
は今これを検討してください。ループは静かにスキップされます。問題を追跡するのに時間がかかることがあります。
クラスが空の場合、コードはとにかく失敗します。なぜあなた自身がそれを理解する必要があるのではなく、システムがあなたに(少し軽度ではあるが)言わせるのはなぜですか?
他の人がヌルを楽しむのはうれしいです、私はまだ学校にいるので、私には何かがないと仮定しています。 –
"無価値"を扱うもっと原理的な方法があります。 NULLは、intなどのプリミティブ型を除外します。型システムでは、暗黙的に参照するのではなく、すべての型で一貫して値の不足を表現する方が優れています。 Haskellの "Maybe"とML/OCaml/F#の "option"型を見て、それをどうやってやるべきかを見てください。 – MichaelGG
[nullのない言語のベスト解説]の複製が可能です(http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null) – nawfal