Тут навіть конкурентного доступу не треба, просто об'єкти мутують. Тоді ще питання, що малось на увазі в коді - чи давнє значення флагу, чи нове, з урахуванням нових обставин та мутації об'єкта.
Ну я не джавный человек, поэтому легко могу ошибаться относительно того, во что именно транслируется подобный код, но меня всегда смущает 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
Date: 2017-03-15 10:31 pm (UTC)no subject
Date: 2017-03-15 10:55 pm (UTC)no subject
Date: 2017-03-15 11:09 pm (UTC)no subject
Date: 2017-03-16 12:09 am (UTC)no subject
Date: 2017-03-16 12:22 am (UTC)no subject
Date: 2017-03-16 08:03 am (UTC)Тут навіть конкурентного доступу не треба, просто об'єкти мутують. Тоді ще питання, що малось на увазі в коді - чи давнє значення флагу, чи нове, з урахуванням нових обставин та мутації об'єкта.
no subject
Date: 2017-03-16 02:52 pm (UTC)no subject
Date: 2017-03-15 10:32 pm (UTC)no subject
Date: 2017-03-16 07:48 am (UTC)no subject
Date: 2017-03-16 02:54 pm (UTC)no subject
Date: 2017-03-16 04:54 pm (UTC)no subject
Date: 2017-03-16 05:12 pm (UTC)no subject
Date: 2017-03-16 06:59 pm (UTC)no subject
Date: 2017-03-16 08:52 pm (UTC)no subject
Date: 2017-03-16 07:56 am (UTC)no subject
Date: 2017-03-16 02:55 pm (UTC)no subject
Date: 2017-03-16 05:07 pm (UTC)no subject
Date: 2017-03-16 06:50 pm (UTC)Нет-нет, речь о том, чтобы сделать этот инстанс, и им всегда пользоваться. Я подумаю, как улучшить этот слайд.
no subject
Date: 2017-03-16 09:55 am (UTC)no subject
Date: 2017-03-16 02:56 pm (UTC)no subject
Date: 2017-03-16 09:04 pm (UTC)no subject
Date: 2017-03-16 04:40 pm (UTC)no subject
Date: 2017-03-16 06:50 pm (UTC)no subject
Date: 2017-03-16 04:52 pm (UTC)7: я так понимаю, что имеется в виду условие б-м статическое, вроде logging level. Тогда есть известная нам из логгинга же ситуация - что если не просто paint() а paint(BigFatObject)? Тогда если мы знаем, что рисовать не будем, то и BigFatObject нам нафиг не нужен, можно им не заморачиваться. А с анонимным классом - фиг его знает, будет он рисовать или нет. Та же история с отладкой - прилетел какой-то аноним, а что у него внутри? Правильное ли там состояние? Как это понять?
8: понятно, что любой булевский аргумент можно развернуть в две функции. Однако если у этих функций 90% кода общие, то надо или делать вместо этого 8 функций, которые по кусочкам собирают общие части, тщательно избегая необщих, или копипейстить.
9: вообще непонятно, что советуется делать. Refactor как? Почему он вдруг от этого станет obvious?
no subject
Date: 2017-03-16 06:56 pm (UTC)8. Вот то-то и оно, что надо рефакторнуть как следует, чтобы не было этого переплетения функциональности.
9. Рефакторинг нужен, конечно. Один флаг "круглое", другой флаг "красное". Ну так если функциональность различается, надо разделить. И это бывает по-разному в разных ситуациях. Возможно, вместо "это красное" надо передавать рисователя.
no subject
Date: 2017-03-16 09:09 pm (UTC)no subject
Date: 2017-03-16 09:49 pm (UTC)любимый патерн одного нашего маэстро - одим метод с 8 параметрами в котором в зависимости от нуловости\значений параметров логика разливаеться в море ветвлений и рекурсивных вызовов чего папало
ну или там поток исполнения на куче void методов которые шарят общий контекст.
Ну и этот контекст = map в котором все говно навалено по текстовым ключам и возращает на выбор Data String BigDecimal and Integer и надо просто знать какого типа конретная ебала иначе нате вам null.
no subject
Date: 2017-03-17 03:32 am (UTC)no subject
Date: 2017-03-18 04:54 am (UTC)no subject
Date: 2017-03-18 07:47 am (UTC)no subject
Date: 2017-03-18 07:46 am (UTC)Ага... но как не крути, а это -- удобно.
Сам как-то пришел к такому варианту, и оказалось что код полкчается чище и удобнее работать -- не надо следить за кучей "хвостов".