среда, 11 мая 2011 г.

Злоупотребление свойствами

Это перевод On the abuse of properties. Автор: Реймонд Чен.

Одна из вещей, которыми, как я вижу, злоупотребляют, - это синтаксис свойств. Многие языки поддерживают т.н. "свойства" (property), которые синтаксически выглядят как обычные поля, но внутренне они трактуются как пара методов ("Get" и "Set").

Важным принципом проектирования свойств является такой: для любого объекта o и его свойства p, строки
o.p;
o.p := o.p;
должны быть NOP (т.е. операцией, которая ничего не делает, не меняет состояние системы). Заметьте, что это может быть весьма ресурсоёмкий NOP.

Мой любимый (вернее сказать: самый ненавистный) пример нарушения этого принципа: объект, который я увидел много лет назад, со свойством print. Вы устанавливали его в True, чтобы отправить объект на принтер! Если вы делали:
o.print := True;
o.print := True;
то вы печатали объект два раза.

Синтаксис свойств копирует синтаксис полей данных не просто так: свойства должны себя вести как поля.

1 комментарий:

  1. На самом деле в этом есть резон. По крайней мере в Delphi.

    Дело в том, что написание редактора компонента - вещь трудоёмкая. Куда проще написать "property ClickToPrint read GetClickToPrint write SetClickToPrint". Такие эрзац-редакторы у меня всегда начинаются на ClickTo.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.