[#] Null, великий и ужасный
habrabot(difrex,1) — All
2016-09-12 11:00:13


# Ошибка дизайна



Именно так и никак иначе: null в C# — однозначно ошибочное решение, бездумно скопированное из более ранних языков.


1. Самое страшное: в качестве значения любого ссылочного типа может использоваться универсальный предатель — null, на которого никак не среагирует компилятор. Зато во время исполнения легко получить нож в спину — [NullReferenceException][1]. Обрабатывать это исключение бесполезно: оно означает безусловную ошибку в коде.
2. Перец на рану: сбой (NRE при попытке разыменования) может находится очень далеко от дефекта (использование null там, где ждут полноценный объект).
3. Упитанный пушной зверек: null неизлечим — никакие будущие нововведения в платформе и языке не избавят нас от прокаженного унаследованного кода, который физически невозможно перестать использовать.

Этот ящик Пандоры был открыт еще [при создании языка ALGOL W великим Хоаром][2], который позднее назвал собственную идею ошибкой на миллиард долларов.

[На самом деле все не так плохо][3]

[1]: https://msdn.microsoft.com/ru-ru/library/sxw2ez55.aspx
[2]: http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare
[3]: https://habrahabr.ru/post/309462/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut