Одна из вещей, которыми, как я вижу, злоупотребляют, - это синтаксис свойств. Многие языки поддерживают т.н. "свойства" (
property
), которые синтаксически выглядят как обычные поля, но внутренне они трактуются как пара методов ("Get
" и "Set
").Важным принципом проектирования свойств является такой: для любого объекта
o
и его свойства p
, строки
o.p; o.p := o.p;должны быть
NOP
(т.е. операцией, которая ничего не делает, не меняет состояние системы). Заметьте, что это может быть весьма ресурсоёмкий NOP
.Мой любимый (вернее сказать: самый ненавистный) пример нарушения этого принципа: объект, который я увидел много лет назад, со свойством
print
. Вы устанавливали его в True
, чтобы отправить объект на принтер! Если вы делали:
o.print := True; o.print := True;то вы печатали объект два раза.
Синтаксис свойств копирует синтаксис полей данных не просто так: свойства должны себя вести как поля.
На самом деле в этом есть резон. По крайней мере в Delphi.
ОтветитьУдалитьДело в том, что написание редактора компонента - вещь трудоёмкая. Куда проще написать "property ClickToPrint read GetClickToPrint write SetClickToPrint". Такие эрзац-редакторы у меня всегда начинаются на ClickTo.