На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (7) 1 2 [3] 4 5 ... Последняя » все  ( Перейти к последнему сообщению )  
> Чистота кода VS оптимизация
    Цитата Serafim @
    Ага, конечно
    ExpandedWrap disabled
      function doSmthng() {
          switch (true) {
              case smthngBad1:
                  throw new Exception("Something bad 1");
              case smthngBad2:
                  throw new Exception("Something bad 1");
              case smthngBad3:
                  throw new Exception("Something bad 1");
          }
       
          do();
      }
    И как вы, Serafim, переделаете Астаротский пример, если будет обработка с возвратом?.. (или в Яве такого нет?)
      Цитата applegame @
      И чем тебе в этом случае поможет "нормальный" паттерн-матчинг?

      хороший вопрос) в данном случае, кажется, ничем)

      Цитата Славян @
      И как вы, Serafim, переделаете Астаротский пример, если будет обработка с возвратом?.. (или в Яве такого нет?)

      Имеется ввиду посткондишн? Для этого приватные методы и декораторы, кажется, придумали)
        При чем тут приватные методы и декораторы ? О_о
          Цитата Астарот @
          При чем тут приватные методы и декораторы ? О_о

          1) Крупные методы принято делить на более мелкие, в частности твой вариант, в языках с возвращаемым значением в операндах (JS, Python, Ruby), вместо кастуемых (Java, PHP) моет выглядеть следующим образом:

          ExpandedWrap disabled
            // На псевдокоде, а-ля JS или жаба
            class Some {
                public function doSmthng() {
                    return checkAbility(a) && checkAbility(b) && checkAbility(c) && do(); // В первой группе языков вернётся значение последнего метода
                }
             
                private function checkAbility(value) {
                    return (bool)value || throw new Exception('...');
                }
            }


          а ещё можно воспользоваться редукцией в группе "вторых языков" :)

          ExpandedWrap disabled
            private function checkAbilities(...values): bool {
                return values.reduce((i, result) -> result ? !i : result, true); // Возвращает, либо тру, либо фолс, если один из аргументов values его содержит
            }



          2) В случае если нужна "обработка с возвратом", что бы это не значило, то можно воспользоваться декоратором, и завраппить ответ. Например, из твоего опыта Астарот, могу привести в пример NotNull аннотацию, которая "враппит" (или контейнеризирует, или декорирует, или вообще это монада :D ) оригинальное значение. Не она, конечно, а подписчик, не допуская нулевого значения в содержимом. В тоже время Ensure и Verify контракты DbC вполне могут сойти за одну из частных применений декораторов на методах. Выбирай любой способ.

          Добавлено
          P.S. Но это всё имеет смысл, когда подобных операций больше трёх. В примере из трёх булевых достаточно:
          ExpandedWrap disabled
            function doSmthng() {
                if (smthngBad1 || smthngBad2 || smthngBad3) {
                    throw new Exception("Something bad");
                }
             
                do();
            }
          Сообщение отредактировано: Serafim -
            Цитата Serafim @
            моет выглядеть следующим образом

            Какой кошмар :-? Однострочник, в котором еще найди нужную do(), или наоборот нужную проверку, которую ты вынес на сторону, и куда нужно еще посмотреть, что б узнать, что именно оно бросает. Бряки на дебаге тоже ставить одно удовольствие. Б-же, зачем себя так не любить?

            Цитата Serafim @
            а ещё можно

            Убивайтунг! Вот просто и сразу - ну, не читается же глазом эта билеберда, так зачем? Потому что можешь? Наверное, никогда не пойму этого...

            Добавлено
            Цитата Serafim @
            В примере из трёх булевых

            Ага, а потом гадай - какая же из трех "выстрелила" :D
              Цитата Астарот @
              Убивайтунг! Вот просто и сразу - ну, не читается же глазом эта билеберда, так зачем? Потому что можешь? Наверное, никогда не пойму этого...
              Сильно похоже на ЫГМ - Ынтырпрайз Гойловного Моска.
                Цитата Астарот @
                то есть за исключением многословности тот же if получается.

                Что интересно, в любом случае получится if-else, только на несколько уровней ниже.
                  Цитата applegame @
                  Сильно похоже на ЫГМ - Ынтырпрайз Гойловного Моска.

                  Не знаю, что это, но мне реально страшно - это ж что он может навертеть в действительно не очевидных местах! :unsure:
                    Цитата Астарот @
                    Не знаю, что это, но мне реально страшно - это ж что он может навертеть в действительно не очевидных местах! :unsure:
                    Вот что это такое - FizzBuzz Enterprise Edition is a no-nonsense implementation of FizzBuzz made by serious businessmen for serious business purposes.
                    Вот где настоящий ужас :lol:
                    Сообщение отредактировано: applegame -
                      Не понимаю, что тебе не нравиться, там даже тесты есть :D
                        Цитата Астарот @
                        Не понимаю, что тебе не нравиться, там даже тесты есть :D
                        Что значит "даже"? >:(
                        Это коммерческий код написанный коммерческим программистом в соответствии с высочайшими энтерпрайз стандартами. Там по определению не может не быть тестов.
                          switch(true) - это сильно :)
                          Больше похоже на обфускацию, а не упрощение кода :lol:

                          Цитата Serafim @
                          моет выглядеть следующим образом
                          Это прикольный выкрутас, конечно (и где-то даже "классический"). Вот только если попадёт в руки джуну, не каждый сообразит, как сие работает.
                          Цитата Serafim @
                          а ещё можно воспользоваться редукцией в группе "вторых языков"
                          А вот это особенно.

                          Добавлено
                          Цитата Астарот @
                          Ага, а потом гадай - какая же из трех "выстрелила"

                          ExpandedWrap disabled
                            function doSmthng() {
                                var i;
                                if (smthngBad1 && (i=1) || smthngBad2 && (i=2) || smthngBad3 && (i=3)) {
                                    throw new Exception("Something bad " + i);
                                }
                             
                                doIt();
                            }
                          Или...
                          ExpandedWrap disabled
                            function doSmthng() {
                                var i = 1;
                                if (smthngBad1 || ++i && smthngBad2 || ++i && smthngBad3) {
                                    throw new Exception("Something bad " + i);
                                }
                             
                                doIt();
                            }
                          :lol:
                            А что это switch(true) делает? Я верно понял, что switch разворачивается в пачку if-ов, в каждом из которых проверяется равенство того, что в switch и в case?
                              OpenGL, получается так...
                              ExpandedWrap disabled
                                if (true == smthngBad1) {...}
                                if (true == smthngBad2) {...}
                              Сообщение отредактировано: Jin X -
                                Цитата Jin X @
                                if (smthngBad1 && (i=1) || smthngBad2 && (i=2) || smthngBad3 && (i=3)) {

                                И потом нарываешься на хитро закопанные грабли в виде смены ключей оптимизации кода, и выясняется... (памяти {$B+})
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0497 ]   [ 15 queries used ]   [ Generated: 16.04.24, 11:31 GMT ]