Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.130.13] |
|
Страницы: (7) 1 2 [3] 4 5 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Цитата Serafim @ И как вы, Serafim, переделаете Астаротский пример, если будет обработка с возвратом?.. (или в Яве такого нет?) Ага, конечно 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(); } |
Сообщ.
#32
,
|
|
|
хороший вопрос) в данном случае, кажется, ничем) Цитата Славян @ И как вы, Serafim, переделаете Астаротский пример, если будет обработка с возвратом?.. (или в Яве такого нет?) Имеется ввиду посткондишн? Для этого приватные методы и декораторы, кажется, придумали) |
Сообщ.
#33
,
|
|
|
При чем тут приватные методы и декораторы ? О_о
|
Сообщ.
#34
,
|
|
|
Цитата Астарот @ При чем тут приватные методы и декораторы ? О_о 1) Крупные методы принято делить на более мелкие, в частности твой вариант, в языках с возвращаемым значением в операндах (JS, Python, Ruby), вместо кастуемых (Java, PHP) моет выглядеть следующим образом: // На псевдокоде, а-ля JS или жаба class Some { public function doSmthng() { return checkAbility(a) && checkAbility(b) && checkAbility(c) && do(); // В первой группе языков вернётся значение последнего метода } private function checkAbility(value) { return (bool)value || throw new Exception('...'); } } а ещё можно воспользоваться редукцией в группе "вторых языков" private function checkAbilities(...values): bool { return values.reduce((i, result) -> result ? !i : result, true); // Возвращает, либо тру, либо фолс, если один из аргументов values его содержит } 2) В случае если нужна "обработка с возвратом", что бы это не значило, то можно воспользоваться декоратором, и завраппить ответ. Например, из твоего опыта Астарот, могу привести в пример NotNull аннотацию, которая "враппит" (или контейнеризирует, или декорирует, или вообще это монада ) оригинальное значение. Не она, конечно, а подписчик, не допуская нулевого значения в содержимом. В тоже время Ensure и Verify контракты DbC вполне могут сойти за одну из частных применений декораторов на методах. Выбирай любой способ. Добавлено P.S. Но это всё имеет смысл, когда подобных операций больше трёх. В примере из трёх булевых достаточно: function doSmthng() { if (smthngBad1 || smthngBad2 || smthngBad3) { throw new Exception("Something bad"); } do(); } |
Сообщ.
#35
,
|
|
|
Цитата Serafim @ моет выглядеть следующим образом Какой кошмар Однострочник, в котором еще найди нужную do(), или наоборот нужную проверку, которую ты вынес на сторону, и куда нужно еще посмотреть, что б узнать, что именно оно бросает. Бряки на дебаге тоже ставить одно удовольствие. Б-же, зачем себя так не любить? Цитата Serafim @ а ещё можно Убивайтунг! Вот просто и сразу - ну, не читается же глазом эта билеберда, так зачем? Потому что можешь? Наверное, никогда не пойму этого... Добавлено Цитата Serafim @ В примере из трёх булевых Ага, а потом гадай - какая же из трех "выстрелила" |
Сообщ.
#36
,
|
|
|
Цитата Астарот @ Сильно похоже на ЫГМ - Ынтырпрайз Гойловного Моска. Убивайтунг! Вот просто и сразу - ну, не читается же глазом эта билеберда, так зачем? Потому что можешь? Наверное, никогда не пойму этого... |
Сообщ.
#37
,
|
|
|
Что интересно, в любом случае получится if-else, только на несколько уровней ниже. |
Сообщ.
#38
,
|
|
|
Цитата applegame @ Сильно похоже на ЫГМ - Ынтырпрайз Гойловного Моска. Не знаю, что это, но мне реально страшно - это ж что он может навертеть в действительно не очевидных местах! |
Сообщ.
#39
,
|
|
|
Цитата Астарот @ Вот что это такое - FizzBuzz Enterprise Edition is a no-nonsense implementation of FizzBuzz made by serious businessmen for serious business purposes.Не знаю, что это, но мне реально страшно - это ж что он может навертеть в действительно не очевидных местах! Вот где настоящий ужас |
Сообщ.
#40
,
|
|
|
Не понимаю, что тебе не нравиться, там даже тесты есть
|
Сообщ.
#41
,
|
|
|
Цитата Астарот @ Что значит "даже"? Не понимаю, что тебе не нравиться, там даже тесты есть Это коммерческий код написанный коммерческим программистом в соответствии с высочайшими энтерпрайз стандартами. Там по определению не может не быть тестов. |
Сообщ.
#42
,
|
|
|
switch(true) - это сильно
Больше похоже на обфускацию, а не упрощение кода Цитата Serafim @ Это прикольный выкрутас, конечно (и где-то даже "классический"). Вот только если попадёт в руки джуну, не каждый сообразит, как сие работает.моет выглядеть следующим образом Цитата Serafim @ А вот это особенно. а ещё можно воспользоваться редукцией в группе "вторых языков" Добавлено Цитата Астарот @ Ага, а потом гадай - какая же из трех "выстрелила" function doSmthng() { var i; if (smthngBad1 && (i=1) || smthngBad2 && (i=2) || smthngBad3 && (i=3)) { throw new Exception("Something bad " + i); } doIt(); } function doSmthng() { var i = 1; if (smthngBad1 || ++i && smthngBad2 || ++i && smthngBad3) { throw new Exception("Something bad " + i); } doIt(); } |
Сообщ.
#43
,
|
|
|
А что это switch(true) делает? Я верно понял, что switch разворачивается в пачку if-ов, в каждом из которых проверяется равенство того, что в switch и в case?
|
Сообщ.
#44
,
|
|
|
OpenGL, получается так...
if (true == smthngBad1) {...} if (true == smthngBad2) {...} |
Сообщ.
#45
,
|
|
|
Цитата Jin X @ if (smthngBad1 && (i=1) || smthngBad2 && (i=2) || smthngBad3 && (i=3)) { И потом нарываешься на хитро закопанные грабли в виде смены ключей оптимизации кода, и выясняется... (памяти {$B+}) |