![]() |
|
|
![]() |
![]() |
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 476
|
![]() Ребята, у меня такой вопрос забавный и незначимый, просто любопытно.
Имеем в классе свойство и простой геттер (без каких-либо преобразований) для него: У нас внутри этого класса есть метод, который использует в своих расчётах значение свойства _someVar. Как обычно принято обращаться за значением: this.someVar или _someVar?
__________________
Не сломано - не чини! |
|
|||||
__________________
местонахождение |
|
|||||
Регистрация: Jun 2014
Адрес: Санкт-Петербург
Сообщений: 185
|
В зависимости от того, что именно требуется. Ведь если свойство и псевдо-свойство (симулируемое геттером) ничем не отличаются, зачем геттер?
__________________
В прошлом - AS3 программист, в данный момент пишу на Haxe |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Разные отклонения могут возникнуть при наследовании, например у наследников геттер станет возвращать преобразованное значение (не в сантиметрах а в дюймах например). Заранее трудно предусмотреть))
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 476
|
Да, но это не главное.
![]() Цитата:
Прихожу к выводу, что не надо ничего пихать в геттер кроме непосредственно значения, за которым обращаются.
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну адекватные программисты конечно не станут пихать в геттер логику, логика и должна работать во "внутренних" единицах измерений; а вот конвертацию в другую валюту и т.п. — запросто. Не путай внутренние дела Класса с тем, что от него ждут. Например, класс для круговых диаграмм может вести все рассчеты в полярной системе координат (угол + длина), но выдавать точки в ортогональной (х, у) — пригодной для отрисовки. Или (похожая история) класс-компонент для выбора цвета в рисовалке все рассчеты "внутри" ведет в системе HSV, потому что это удобно для элементов управления, но на выходе от него ждут цвет в системе RGB, так как флэш работает в ней. И в конце рисования потребуют картинку в JPEG или PNG, хотя во время рисования эти форматы не использовались вообще никак.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 476
|
Посоветуйте, плиз, более адекватное решение. У меня пока как было. Нужно кому-то значение силы персонажа - обращаемся к экземпляру Character. Там условный "геттер" (на самом деле не геттер в чистом виде, а метод, принимающий ID нужного свойства, за что меня тут все мэтры нещадно критикуют) берёт текущее значение силы из свойств персонажа, проверяет модификаторы в менеджере статус-эффектов, проверяет модификаторы в менеджере экипировки, всё собирает, применяет и выдаёт вовне окончательное значение.
Если всю дополнительную логику убирать из геттера, то выходит, что нужно отдельно получать "чистое" значение свойства, а отдельно (другим методом) - его модификаторы и собирать всё уже на уровне класса, запрашивающего данные. Так? И если так, то во всех внешних объектах придётся добавлять логику, применяющую модификаторы к значениям.
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну, как-бы по-хорошему, свойства должны бы обновляться (пересчитываться) каждый раз при изменении того, от чего они зависят (надел кирасу — защитка пересчиталась, модификатор усталости при силовых атаках пересчитался и т.п.), а не в момент запроса. Тем более когда свойства зависят друг от друга: получается, запросили силу удара, а она зависит в том числе от эффекта каких-то зелий, но их еще не пересчитывали? Конечно же в идеале все свойства должны быть всегда актуальными на данный момент. Технически это означает, что перерасчеты делаются на уровне "сеттеров", а не в геттерах))) Когда что-то изменяется (сеттером, но не только), то сразу же изменяются все зависимые свойства. Как раз для сеттеров более чем нормально запускать какие-то логические цепочки, ведь в отличие от геттеров, сеттеры меняют значения внутренних свойств, то есть производят действия а не просто констатируют состояния каких-то свойств на данный момент. Геттер ни в коем случае не должен менять внутренние свойства, это противоречит всем здравым смыслам. Он может только представить какое-то свойство в другом формате и ВЫДАТЬ наружу модифицированное значение, не меняя внутреннее.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:15. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|