
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (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 аннотацию, которая "враппит" (или контейнеризирует, или декорирует, или вообще это монада ![]() Добавлено P.S. Но это всё имеет смысл, когда подобных операций больше трёх. В примере из трёх булевых достаточно: ![]() ![]() function doSmthng() { if (smthngBad1 || smthngBad2 || smthngBad3) { throw new Exception("Something bad"); } do(); } |
Сообщ.
#35
,
|
|
|
Цитата Serafim @ моет выглядеть следующим образом Какой кошмар ![]() Цитата 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+}) |