Сообщение Re[9]: Почему программисты прошлого были умнее от 13.01.2026 4:10
Изменено 13.01.2026 4:16 Sinclair
Re[9]: Почему программисты прошлого были умнее
Здравствуйте, vdimas, Вы писали:
V>На практике этот паттерн хорошо работает лишь в случае отсутствия полей у объекта, т.е. когда есть только виртуальные ф-ии и им можно приписать некое "нулевое" поведение либо выбрасывание исключений (одно время широко использовали этот паттерн в реальных разработках, потом отказались).
V>Потому что на практике в программе, допустим, будет связанный список объектов некоего типа, и если использовать как конец списка ссылку на "нулевой" объект, то при непроверке на null (в чём суть ошибки, которую пытаемся лечить) будет обращение к полям этого null-объекта с чтением фигни, т.е. ошибка маскируется и себя никак не проявляет. Или проявляет себя намного позже, вдали от места и времени возникновения — это самый неприятный случай.
V>В общем, такие костыли обычно ведут к еще худшим ошибкам, т.е. требующим гораздо больше усилий на обнаружение самого факта ошибки и затем на её локализацию.
Чтобы делать current := Next(current) нужно, чтобы а) current имел тип reference(IntegerList, Null), и б) чтобы была выполнена проверка if(current is IntegerList).
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).
Re[9]: Почему программисты прошлого были умнее
Здравствуйте, vdimas, Вы писали:
V>На практике этот паттерн хорошо работает лишь в случае отсутствия полей у объекта, т.е. когда есть только виртуальные ф-ии и им можно приписать некое "нулевое" поведение либо выбрасывание исключений (одно время широко использовали этот паттерн в реальных разработках, потом отказались).
V>Потому что на практике в программе, допустим, будет связанный список объектов некоего типа, и если использовать как конец списка ссылку на "нулевой" объект, то при непроверке на null (в чём суть ошибки, которую пытаемся лечить) будет обращение к полям этого null-объекта с чтением фигни, т.е. ошибка маскируется и себя никак не проявляет. Или проявляет себя намного позже, вдали от места и времени возникновения — это самый неприятный случай.
V>В общем, такие костыли обычно ведут к еще худшим ошибкам, т.е. требующим гораздо больше усилий на обнаружение самого факта ошибки и затем на её локализацию.
Чтобы делать current := Next(current) нужно, чтобы а) current имел тип reference(IntegerList, Null), и б) чтобы была выполнена проверка if(current is IntegerList).
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).