Одна из вещей, которыми, как я вижу, злоупотребляют, - это синтаксис свойств. Многие языки поддерживают т.н. "свойства" (
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.