なぜC#とJavaには "null "が存在するのか?
疑問点
C#(またはJava)で開発したソフトウェアの多くのバグがNullReferenceExceptionを引き起こすことに気づきました。
なぜ "null" が言語に含まれているのか、理由はあるのでしょうか?
結局のところ、"null"がなければ、バグもないわけでしょう?
つまり、nullがなければ動作しないような機能は、この言語にはないのでしょうか?
どのように解決するのか?
C#の父と呼ばれるAnders Hejlsbergは、この点について次のように語っています。 Computerworld のインタビュー :
<ブロッククオート例えば、型システムにおいて、値型と参照型の分離や、型のnullabilityは行っていません。これは少し複雑で専門的に聞こえるかもしれませんが、C# では文字列のような参照型は null にできますが、値型は null にすることができません。この文字列は絶対にNULLにできないので、コンパイラはここでNULLポインタをヒットできないことをチェックしてほしい」と宣言することができるのです。
今日、私たちのプラットフォームで C# を使ってコーディングしている人が遭遇するバグの 50% は、おそらく null 参照例外でしょう。もし私たちが、「このパラメーターは決してヌルであってはならず、コンパイラーはコードの静的解析を行うことによって、呼び出しごとにそれをチェックしてください」と言えるような、より強力な型システムを持っていたなら。そうすれば、バグのクラスを根絶できたでしょう。
C# チームの元ソフトウェア設計エンジニアである Cyrus Najmabadi (現在は Google で働いています) は、彼のブログでこのテーマについて議論しています。( 第 1 回 , 2 番目 , 3 番目 , 4 番目 ). NULLでない型を採用する最大の障害は、記法がプログラマの習慣やコードベースを乱すことにあるようだ。C# プログラムの参照の 70% のようなものが、非 null 可能なものとして終了しそうです。
もし、本当にC#でNULLでない参照型を持ちたいのであれば、以下のものを使ってみてください。 Spec# を使ってみてください。
static string AcceptNotNullObject(object! s)
{
return s.ToString();
}
関連
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】NULLのない言語についての最適な説明