Помогает изменить формулировку и то, как работает диалог. Например, наличие кнопок OK / Отмена позволяет пользователям игнорировать большую часть диалога. Если вы удалите обычные кнопки и замените их более текстовыми ссылками на команды, пользователи с большей вероятностью будут читать каждую кнопку, потому что опция «быстро уходи» недоступна.
Помимо переменных-членов и параметров метода у вас также есть локальные переменные. Одна из самых важных вещей об объекте - его внутреннее состояние. Явное разыменование переменных-членов очень ясно показывает, где вы ссылаетесь на это состояние и где вы изменяете это состояние.
Например, если у вас есть такой код, как:
someMethod(some, parameters) {
... a segment of code
foo = 42;
... another segment of code
}
, при быстром просмотре вы должны иметь ментальную модель переменных, определенных в предыдущем сегменте, чтобы знать, является ли это просто временной переменной или она изменяет состояние объектов. Тогда как this.foo = 42 делает очевидным, что состояние объектов изменено. И если явное разыменование используется исключительно, вы можете быть уверены, что в противном случае переменная является временной.
Более короткие, хорошо продуманные методы делают ее немного менее важной, но все же,
Если вы говорите о «явном self
» в смысле Python, вот интересное обсуждение по этой теме. Вот Гвидо, отвечающий на статью Брюса Эккеля . Комментарии к статье Брюса также поучительны (во всяком случае, некоторые из них).
Он необходим для передачи указателя / ссылки на текущий объект в другом месте или для защиты от самоприсваивания в операторе присваивания.
Что, если аргументы метода имеют то же имя, что и переменные-члены? Затем вы можете использовать, например, this.x = x
. Где this.x
- переменная-член, а x
- аргумент метода.
Это всего лишь один (тривиальный) пример.
Обычно я использую это (в C ++) только при написании оператора присваивания или конструктора копирования , поскольку это помогает четко идентифицировать переменные . Другое место, где я могу подумать об его использовании, - это если имена переменных параметров вашей функции такие же, как имена переменных-членов, или я хочу убить свой объект, используя , удалите это .
Например, имена участников совпадают с именами, переданными методу
public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
{
this.screenTemplateID = screenTemplateID;
this.screenTemplateName = screenTemplateName;
this.isDefault = isDefault;
}