ヌル素晴らしいとひどい

設計エラー



C#のnullは、明らかに誤りのある解決策であり、以前の言語から考え抜かれてコピーされたものです。







  1. 最悪の事態:あらゆる参照型の値として、普遍的な裏切り者を使用することができます-null、コンパイラはそれに対していかなる反応もしません。 ただし、実行中にback- NullReferenceExceptionでナイフを取得するのは簡単です。 この例外の処理は無益です。つまり、コード内の無条件のエラーを意味します。
  2. 傷のコショウ:障害(逆参照しようとするときのNRE)は、欠陥から非常に遠く離れている可能性があります(本格的なオブジェクトが待機している場合はnullを使用します)。
  3. 十分に飼育された毛皮のような動物:nullは不治です-プラットフォームと言語の将来の革新は、使用を止めるのが物理的に不可能な、より古いレガシーコードから私たちを救いません。


このPandoraの箱は、偉大なHoarによってALGOL W言語が作成されたときに開かれました。Hoarは 、後に彼自身のアイデアを10億ドルの間違いと呼びました。







最高の歴史的選択肢



もちろん、それは現代の標準から明らかでした







  1. 意味のあるタイプと参照タイプの統一されたNullable。
  2. 特別な演算子( 三項演算子-?:エルビス-?.コアレス-?? )のみを使用したNullableデリファレンス。例外をスローせずに両方のオプション(オブジェクトの有無)の必須処理を提供します。
  3. 例:

    object o = new object(); //   -  
    object o = null; //   -  ,   null 
    object? n = new object; // nullable  -  
    object? n = null; // nullable  -  
    object o = n; //   -  ,  object  object? 
    object o = n ?? new object(); //   fallback  (coalesce),       n != null
    Type t = n ? value.GetType() : typeof(object); //    - value   n,    null
    Type? t = n ? value.GetType(); //    ? -  null,    null,       ,   nullable
          
          



  4. NRE : null , .


, . , .









, . .







  1. null if. .







    1. , — .
    2. , ,
    3. (, )
    4. .


  2. NotNull.







    1. R#
    2. , : null , .


  3. Null object. , .







    1. null , : IEnumerable, , , .. — -.
    2. : — null null object, : , NRE .


  4. . .







    1. , null, . , , .







    2. .


  5. null: , Try OrDefault . . .







  6. CanBeNull. - NotNull.







    1. R#
    2. , NotNull
    3. null .


  7. C# (, , coalesce)







    1. null .
    2. ArgumentException null NotNull .
    3. .
    4. , .


  8. Optional. .







    1. NRE
    2. .
    3. , , .
    4. memory traffic


  9. Maybe. LINQ , .







    1. .
    2. Optional .
    3. , .
    4. - .


  10. .







    1. , .
    2. Code Contracts , .
    3. , --.


  11. Fody/NullGuard. null .







    1. : , , , .
    2. AllowNull — , — .
    3. , null, AllowNull
    4. , .
    5. .
    6. ( null , ).
    7. , , null, .
    8. — NullGuard .
    9. , , .


  12. null ( C#)







    1. .
    2. NRE .
    3. , ,
    4. .
    5. .






— :







4, 5, 7, 11, 12 ( ) 1, 2 3, 6, 8, 9, 10


20 , .









.








All Articles