Тут навіть конкурентного доступу не треба, просто об'єкти мутують. Тоді ще питання, що малось на увазі в коді - чи давнє значення флагу, чи нове, з урахуванням нових обставин та мутації об'єкта.
Ну я не джавный человек, поэтому легко могу ошибаться относительно того, во что именно транслируется подобный код, но меня всегда смущает new внутри условных операторов в составе функций/методов. К самой идее, что параметры в большинстве случаев (не всегда - например если вызов функции или выделение внутренних структур данных JVM для работы с объектом класса связаны с существенно бОльшим оверхедом, чем проверка флага снаружи, то это далеко не очевидно) я отношусь весьма положительно, - смущает именно конкретная реализация примера. :)
Python вряд ли. Там switch нет, а ООП есть. Плюс функции, классы и методы — first-class citizens, и локальные функции/классы вполне идиоматичны. А «если функция принимает булевский параметр, то лучше сделать две функции» — один из принципов ГвР.
7: я так понимаю, что имеется в виду условие б-м статическое, вроде logging level. Тогда есть известная нам из логгинга же ситуация - что если не просто paint() а paint(BigFatObject)? Тогда если мы знаем, что рисовать не будем, то и BigFatObject нам нафиг не нужен, можно им не заморачиваться. А с анонимным классом - фиг его знает, будет он рисовать или нет. Та же история с отладкой - прилетел какой-то аноним, а что у него внутри? Правильное ли там состояние? Как это понять?
8: понятно, что любой булевский аргумент можно развернуть в две функции. Однако если у этих функций 90% кода общие, то надо или делать вместо этого 8 функций, которые по кусочкам собирают общие части, тщательно избегая необщих, или копипейстить.
9: вообще непонятно, что советуется делать. Refactor как? Почему он вдруг от этого станет obvious?
Да, 7 как-то, похоже, неочевидно выглядит; могут подумать, что я предлагаю каждый раз что-то инстанциировать. Нет, не предлагаю Спасибо.
8. Вот то-то и оно, что надо рефакторнуть как следует, чтобы не было этого переплетения функциональности.
9. Рефакторинг нужен, конечно. Один флаг "круглое", другой флаг "красное". Ну так если функциональность различается, надо разделить. И это бывает по-разному в разных ситуациях. Возможно, вместо "это красное" надо передавать рисователя.
некотыре моменты 1-в-1 похожи на то что я вижу регулярно любимый патерн одного нашего маэстро - одим метод с 8 параметрами в котором в зависимости от нуловости\значений параметров логика разливаеться в море ветвлений и рекурсивных вызовов чего папало ну или там поток исполнения на куче void методов которые шарят общий контекст. Ну и этот контекст = map в котором все говно навалено по текстовым ключам и возращает на выбор Data String BigDecimal and Integer и надо просто знать какого типа конретная ебала иначе нате вам null.
я вроде как начал пропихивать через архитекторов решение что бы эту вольницу забороть, но со следующей недели меня перекинули на другой проект ( и времени этим заниматься у меня не будет скорее всего )
\\map в котором все говно навалено по текстовым ключам и возращает на выбор Data String BigDecimal and Integer и надо просто знать какого типа конретная ебала иначе нате вам null.
Ага... но как не крути, а это -- удобно.
Сам как-то пришел к такому варианту, и оказалось что код полкчается чище и удобнее работать -- не надо следить за кучей "хвостов".
no subject
no subject
no subject
no subject
no subject
no subject
Тут навіть конкурентного доступу не треба, просто об'єкти мутують. Тоді ще питання, що малось на увазі в коді - чи давнє значення флагу, чи нове, з урахуванням нових обставин та мутації об'єкта.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Нет-нет, речь о том, чтобы сделать этот инстанс, и им всегда пользоваться. Я подумаю, как улучшить этот слайд.
no subject
no subject
no subject
no subject
no subject
no subject
7: я так понимаю, что имеется в виду условие б-м статическое, вроде logging level. Тогда есть известная нам из логгинга же ситуация - что если не просто paint() а paint(BigFatObject)? Тогда если мы знаем, что рисовать не будем, то и BigFatObject нам нафиг не нужен, можно им не заморачиваться. А с анонимным классом - фиг его знает, будет он рисовать или нет. Та же история с отладкой - прилетел какой-то аноним, а что у него внутри? Правильное ли там состояние? Как это понять?
8: понятно, что любой булевский аргумент можно развернуть в две функции. Однако если у этих функций 90% кода общие, то надо или делать вместо этого 8 функций, которые по кусочкам собирают общие части, тщательно избегая необщих, или копипейстить.
9: вообще непонятно, что советуется делать. Refactor как? Почему он вдруг от этого станет obvious?
no subject
8. Вот то-то и оно, что надо рефакторнуть как следует, чтобы не было этого переплетения функциональности.
9. Рефакторинг нужен, конечно. Один флаг "круглое", другой флаг "красное". Ну так если функциональность различается, надо разделить. И это бывает по-разному в разных ситуациях. Возможно, вместо "это красное" надо передавать рисователя.
no subject
no subject
любимый патерн одного нашего маэстро - одим метод с 8 параметрами в котором в зависимости от нуловости\значений параметров логика разливаеться в море ветвлений и рекурсивных вызовов чего папало
ну или там поток исполнения на куче void методов которые шарят общий контекст.
Ну и этот контекст = map в котором все говно навалено по текстовым ключам и возращает на выбор Data String BigDecimal and Integer и надо просто знать какого типа конретная ебала иначе нате вам null.
no subject
no subject
no subject
no subject
Ага... но как не крути, а это -- удобно.
Сам как-то пришел к такому варианту, и оказалось что код полкчается чище и удобнее работать -- не надо следить за кучей "хвостов".