Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>> Неее. Нам нужна проверка на полную инициализацию.
S>Всё верно.
S>>И для первой ноды должно быть Previous = Node.EmptyNode, а для последней Next = Node.EmptyNode это осмысленное значение
S>Нет. С чего бы это "осмысленное значение"? Если нас устраивает, что у первой и последней вместо Previous и Next — какой-то булшит, то честнее там так и записать null.
S>По крайней мере, не будет иллюзии, что они во что-то там проинициализированы.
S>> Но мы получаем проверку компилятора на инициализацию всех свойств.
S>Ничего мы не получаем. Получаем шиш с маслом. Вы можете сколько угодно подменять задачу, но это никак не приближает нас к решению исходной задачи.
S>Вы делаете, как мои дети: говоришь им "не должно быть мусора на полу" — ну так они его в одёжный шкаф запихивают. "Задача решена".
Получаем. Ибо для всех нод кроме первой и последней у нас будет проверка, а с null у нас этой проверки не будет.
Либо нужно делать
#nullable disable
#nullable enable
S>>>Более того, во многих случаях такая замена делает решение хуже. Потому, что ещё сильнее откладывает детектирование проблемы. Nul
S>> Зато у нас есть проверка на инициализацию свойств, что чего null reference лишен.
S>Нет никакого "зато". Есть иллюзия, что мы решили задачу. Это как claude, которой пишешь "такой-то тест падает — исправь". А она такая "а, ну да, точно, ведь наша реализация ещё не умеет обрабатывать массивы. Закомментируем тест — ура, все тесты зелёные!"
Еще раз читай внимательно для всех узлов кроме первой и последней будет "правильная "проверка, чего лишен Node?
S>>Ну а в большинстве проблем для Empty будет бесконечная рекурсия, которая тоже отлавливается.
S>
S>По-моему, вы надо мной издеваетесь. Раньше нас беспокоила неполная инициализация, которая приводила к NRE при первом обращении. Мы хотели, чтобы неполнота инициализации отлавливалась раньше, желательно прямо в compile time.
S>Вы предложили заменить дефолтную значение с null на Empty, и теперь неполноту инициализации мы обнаруживаем не раньше, а позже, и ещё менее очевидным образом.
S>И ещё и настаиваете на своём решении
Меня беспокоило то, что в алгоритме Влада будет вызываться ошибка, так как первый и последний узел не будут инициализироваться!
Я предложил , что не нужно изменять язык, достаточно добавить свой анализатор типа
#nullable disable
#продвинутй nullable enable
код c проверкой на присваивание всем полям не null значений
#продвинутй nullable disable
#nullable enable
Ну или
#nullable disable
#pragma warning restore продвинутый nullable
код c проверкой на присваивание всем полям не null значений
#pragma warning disable продвинутый nullable
#nullable enable