Re[19]: C# [Proposal] init block for safe initialization of
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.12.25 07:32
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>> Антон, а что смешного в


S>>

S>>для not null reference нужны заглушки типам Node.EmptyNode
S>>Опять же для первой ноды должно быть Previous = Node.EmptyNode, а для последней Next = Node.EmptyNode


S>> Мы делаем защиту от null, поэтому

S>То, что мы не делаем защиту от null. Мы делаем защиту от логических ошибок.
S>Один из видов логических ошибок — недоинициализация. Проблема не в null, а в том, что нужное свойство не получает осмысленного значения. Замена одного бессмысленного значения на другое — это шило на мыло.

Неее. Нам нужна проверка на полную инициализацию.
И для первой ноды должно быть Previous = Node.EmptyNode, а для последней Next = Node.EmptyNode это осмысленное значение
Но мы получаем проверку компилятора на инициализацию всех свойств.

S>Более того, во многих случаях такая замена делает решение хуже. Потому, что ещё сильнее откладывает детектирование проблемы. Null вызывает NRE при первом же обращении, а Empty стрельнет вообще непонятно где. Скорее всего — при проверке результатов работы, и то при условии достаточно внимательной проверки.


S>А мы хотим, чтобы ошибка обнаруживалась там, где она совершена. Соответственно, not null даст нам ошибку прямо там, где мы пытаемся засунуть null, да ещё и в компайл-тайм, а не при выполнении юнит-теста.

S>Empty такого преимущества лишён.

Зато у нас есть проверка на инициализацию свойств, что чего null reference лишен.
Ну а в большинстве проблем для Empty будет бесконечная рекурсия, которая тоже отлавливается.
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.