понедельник, 27 августа 2007 г.

X++: аксессоры 2

[id:041]

Реализация аксессора "parmMyMoney" в предыдущем уроке может вызвать ваши справедливые возражения, ведь там происходит постоянное переприсвоение значений полю "myMoney", даже если не нужно ничего изменять. Это называется "overhead" или «непроизводительные затраты».

Однако прилагать дополнительные усилия стоит, когда изменяемое поле имеет большой размер. К примеру, контейнер; контейнер — это наш размерчик! Он может быть очень большим. В случае контейнеров стоит напрячь мозги: public container parmMyBunchOfMoney(container _myBunchOfMoney = conNull()) { if (!prmIsDefault(_myBunchOfMoney) { myBunchOfMoney = _myBunchOfMoney; } return myBunchOfMoney; } connull() возвращает пустой контейнер, здесь он используется как значение по умолчанию. Глобальный метод prmIsDefault() возвращает ноль, если параметр _myBunchOfMoney содержит что-то новенькое; и выдаст единицу, если параметр хранит значение по умолчанию.
Суть приведенного кода — изменить содержимое контейнера только тогда, когда мы прислали что-то новое.

Итог

  • запомнить шаблон аксессора parmMyBunchOfMoney
  • глобальный метод prmIsDefault определяет, содержит ли параметр метода значение по умолчанию.

Комментариев нет: