Re[9]: Почему программисты прошлого были умнее
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.01.26 04:10
Оценка:
Здравствуйте, vdimas, Вы писали:

V>На практике этот паттерн хорошо работает лишь в случае отсутствия полей у объекта, т.е. когда есть только виртуальные ф-ии и им можно приписать некое "нулевое" поведение либо выбрасывание исключений (одно время широко использовали этот паттерн в реальных разработках, потом отказались).

V>Потому что на практике в программе, допустим, будет связанный список объектов некоего типа, и если использовать как конец списка ссылку на "нулевой" объект, то при непроверке на null (в чём суть ошибки, которую пытаемся лечить) будет обращение к полям этого null-объекта с чтением фигни, т.е. ошибка маскируется и себя никак не проявляет. Или проявляет себя намного позже, вдали от места и времени возникновения — это самый неприятный случай.

V>В общем, такие костыли обычно ведут к еще худшим ошибкам, т.е. требующим гораздо больше усилий на обнаружение самого факта ошибки и затем на её локализацию.


record IntegerList(integer Value; reference(IntegerList, Null) Next);
record Null();

Чтобы делать current := Next(current) нужно, чтобы а) current имел тип reference(IntegerList, Null), и б) чтобы была выполнена проверка if(current is IntegerList).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Отредактировано 13.01.2026 4:16 Sinclair . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.