- 1
- 2
- 3
- 4
- 5
- 6
- 7
$useDummy = true;
do {
if (!file_exists($filename)){ break; }
require_once $filename;
if (!class_exists($className)){ break; }
$useDummy = false;
} while(false);
someone 13.05.2013 12:48 # −3
bormand 13.05.2013 13:07 # +3
someone 13.05.2013 13:09 # +3
Я про общий случай.
Хотя, конечно, без неё теоретически можно всегда обойтись. Ценой лесенки отступов.
bormand 13.05.2013 13:21 # +4
В общем случае она тоже не нужна. В 80% случаев лесенка больше 3 уровней заставляет задуматься о функциях (ну по крайней мере меня).
P.S. Ну не только лесенкой, но и ретурнами можно.
Lure Of Chaos 13.05.2013 17:25 # +1
где-то я читал, что правильней иметь только одну точку возврата
govnomonad 13.05.2013 18:10 # +2
это нужно для языков, которые ниасисли RAII
Lure Of Chaos 13.05.2013 18:13 # 0
сисли?
ниа!
bormand 13.05.2013 18:28 # +4
А я где-то читал, что goto не нужно юзать...
Если серьезно - все хорошо в меру ;) И поэтому я стараюсь писать так, как потом будет легче читать, а не так, как наставляет нас какой-то очередной лжекодобожок. И ебал я в рот все эти религии флагоебов-брейконенавистников, негоутушников и одновозвратников...
P.S. Безусловно, во всех этих советах есть доля истины - они страхуют новичка от слишком частого использования goto, return и прочих мощных синтаксических конструкций, которые при неправильном использовании превратят код в лапшу. Но надо понимать, что это не закон, а всего лишь подсказка...
Lure Of Chaos 13.05.2013 18:41 # 0
bormand 13.05.2013 19:23 # 0
Преждевременная оптимизация? Или инлайн тут преследует какие-то более высокие цели?
Lure Of Chaos 14.05.2013 01:04 # 0
var a=smth();
do(a);
вскгда руки чешутся слелать из этого
do(smth());
и наоборот, из
func1(f(1));
func2(f(1));
всегда делаю
var a=f(1);
func1(a);
func2(a);
если, конечно, не требуется именно двух вызовов.
а еще люблю паттерн fluent interface (что Кузя называет "программированием на стрелочках"), и "упрощенные аксессры" вида prop() и prop(val) вместо каноничных getProp() и setProp(val).... еще вспомню свои грехи - расскажу.
bormand 14.05.2013 05:20 # 0
do(smth());
Ну а почему нет? Если там, конечно, не получается километровая строка.
> prop() и prop(val) вместо каноничных getProp() и setProp(val)
В бусте, кстати, местами такие юзают.
P.S. Под "инлайню" я обычно подразумеваю - копипащу тело функции целиком в точку вызова.
TarasB 13.05.2013 16:21 # +2
Но да, для мозга, изъеденного червями, это очень сложно - понять, когда религия неготоизма мешает целесообразности.
bormand 13.05.2013 16:35 # +4
изъебанного паттернами и принесенного на алтарь кодорелигиозных божков
eth0 13.05.2013 19:25 # −1
TarasB 14.05.2013 09:52 # +1
eth0 14.05.2013 21:22 # +1
inkanus-gray 13.05.2013 13:14 # 0
bormand 13.05.2013 13:24 # +1
Обычно или это что-то вообще не нужно, и можно не парясь напихать ретурнов.
Или это что-то стоит после каждой веточки, в духе и тогда или лесенка, или кресто-RAII, или вынос кишков в осмысленную функцию..
3.14159265 14.05.2013 15:43 # 0
А continue? Его-то ретурном не заменишь.
Особенно continue на новую итерацию одного из вышележащих циклов.
bormand 14.05.2013 15:56 # 0
3.14159265 14.05.2013 18:08 # 0
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.lastIndexOf%28char%5B %5D%2Cint%2Cint%2Cchar%5B%5D%2Cint%2Cint %2Cint%29
Ну вот, практически эталонный пример.
bormand 14.05.2013 19:38 # 0
3.14159265 14.05.2013 19:52 # 0
bormand 14.05.2013 20:07 # +1
bormand 14.05.2013 20:10 # +1
3.14159265 14.05.2013 20:17 # 0
Или же то что стоит за циклом завёрнуто в такую хитрую конструкцию как for-else, тем самым оно не сработает от бряка.
В принципе каждый кодер выкручивается по-своему, вот в бейсике/фортане есть exit do/for/while или continue. Если замиксовать разные циклы, то можно, опять-таки обойтись без goto (в 95% тройной вложенности достаточно).
В руби там вообще экзотика retry всякие.
Только сишкобляди и поцкалики ебутся с goto.
roman-kashitsyn 14.05.2013 22:13 # +1
А все настоящие пацаны уже давно используют COME FROM
LispGovno 14.05.2013 23:17 # +1
3.14159265 14.05.2013 18:14 # 0
Apache StringUtils
bormand 14.05.2013 19:25 # 0
3.14159265 14.05.2013 19:44 # 0
Уже давно хочу запилить свой велик и проверить насколько обгонит стандартный метод в лоб.
bormand 14.05.2013 19:28 # 0
bormand 14.05.2013 19:30 # 0
3.14159265 14.05.2013 19:34 # 0
Проблема жабы тут в том что надо сделать 10 методов
1 на Object и на все примитивные типы. В том числе и char.
Яркий пример - класс java.util.Arrays.
Только его средствами indexOF получается слишком тупым:
Arrays.asList(array).indexOf(val);
Arrays.binarySearch(Arrays.sort(array), val);
bormand 14.05.2013 19:36 # +2
3.14159265 14.05.2013 19:39 # 0
Да выбешивал раньше.
Особенно попытки соотвествия типов и их обёрток.
Ну сделайте вы хотя бы для унификации:
тип <-> Тип //полезно для рефлексии
Нет, блядь int vs Integer. char vs Character. Итд.
bormand 14.05.2013 19:42 # +1
boolean вон удлинили... а int и char остались как есть.
3.14159265 14.05.2013 19:46 # +2
Сцуки. А я так люблю писать bool.
3.14159265 14.05.2013 19:37 # 0
Полагаю да. Не вся жаба серверная, и не вся умеет инлайнить сама.
TarasB 14.05.2013 16:22 # +1
3.14159265 14.05.2013 16:36 # +1
Бугага. Просто признай что в Аде нету ни обычного continue, ни continue на конкретный цикл.
TarasB 14.05.2013 16:49 # +1
3.14159265 14.05.2013 17:53 # +2
inkanus-gray 13.05.2013 13:10 # +1
Если ифов будет не два, а десяток, то при классической схеме появятся многократно вложенные фигурные скобки, а здесь хватит и одной пары скобок в do { ... } while. Программирование с goto, но без goto. Можно писать спагетти-код, не используя ни одной метки.
bormand 13.05.2013 13:15 # +2
3.14159265 13.05.2013 16:14 # +1
Только в быдлоязыках в которых нет break на метку, если я правильно понял о чем вы.
Vindicar 14.05.2013 09:29 # 0
TarasB 14.05.2013 09:51 # +3
Исключения - только для исключительных ситуаций. Для обработки штатного события использовать исключения - это полное мудачество!
Lure Of Chaos 14.05.2013 12:26 # +1
bormand 14.05.2013 12:47 # 0
А обработчиков по сути всего 1-2, которые или откатывают текущую транзакцию\операцию, или рвут сессию, или крашат прогу, в зависимости от фатальности.
3.14159265 14.05.2013 13:58 # +1
Согласен.
>Исключения - только для исключительных ситуаций.
Согласен вдвойне.
Но в путхоне как вижу - нормальная практика.
http://stackoverflow.com/questions/653509/breaking-out-of-nested-loops
3.14159265 14.05.2013 14:17 # 0
А вот и разгадка! Гвидо сказал что break на метку "слишком сложно", быдлопитонисты и девы языка не осилят.
И началось "в кривых руках" это не будет нормально использоваться, "Lazy programmers are everywhere" итд.
Так про любую фичу можно сказать. "Bydloprogrammers are everywhere" - универсальный аргумент против любой конструкции вообще!
bormand 14.05.2013 15:29 # +4
roman-kashitsyn 14.05.2013 15:41 # +5
3.14159265 14.05.2013 15:45 # 0
>родство
уродство
Vindicar 14.05.2013 19:04 # +1
TarasB 15.05.2013 11:47 # 0
Vindicar 15.05.2013 15:40 # 0
А в ситуации где исключения логически не подходят... цепочка if'ов плюс функции, наверно.
3.14159265 13.05.2013 16:23 # 0
Для ущербного языка, где break может задавать только нечитаемый уровень вложенности - да, нормальный такой костыль.
http://ideone.com/V0PSqV
ПЫХОПРОБЛЕМЫ
И тут же вопрос: зациклится ли такой код?
bormand 13.05.2013 16:33 # 0
3.14159265 13.05.2013 16:35 # +2
Правильно зацикливать - continue, но его без цикла не сделаешь.
В общем хоть что-то в жабе сделали очень грамотно - goto вырвали с корнем и запретили, но сделали "структурные" переходы на начало/конец именованного блока.
bormand 13.05.2013 16:37 # +1
TarasB 13.05.2013 16:54 # +3
3.14159265 13.05.2013 16:59 # +3
Тем более что другие "современные" сишкоблядские (PHP,С#) языки так и до сих пор (2013) не осилили выход по метке. О крестах и сишке я молчу.
И спору нет, по мне ада гораздо приятнее срамного поцкаля.
LispGovno 14.05.2013 19:16 # 0
3.14159265 14.05.2013 19:23 # +1
Вот:
INDX: for (var i=1;i<10;++i) for (var j=0;j<10;++j) if (j>3) break INDX;
console.log(i,j)
>сишка впрочем осилила
Не осилила.
Из сишкоблядских емнип только жаба, жс и D.
Xom94ok 13.05.2013 15:52 # +3
Проблема зависания нашлась за десять минут без отладчика, после чего почему-то сразу вспомнился Тарас.
guest 14.05.2013 13:18 # −1
это убожество в данном случае, так как этот оператор предназначен как цикл, а не костыль для здорового
нужно было использовать
try { }
catch(Exception $e) {}
3.14159265 14.05.2013 13:59 # +2
Именно то об чем выше писал Тарас.
Тем более что исключения и пхп, эмм...
Ну обработка ошибок в пхп явно сишкоблядская и потому даже исключения не спасут отца русской демократии.
TarasB 14.05.2013 14:05 # +1
Зато он не использовал goto и его духовный брахман не будет его ругать.
bormand 14.05.2013 15:38 # +1
Спаси мир от кошачьей экспансии. Юзай goto!
guest 14.05.2013 18:27 # 0
если говорить как я написал бы, то выглядело бы так
$useDummy = true;
@include_once $filename;
if(class_exists($className)) {
$useDummy = false;
}
guest 14.05.2013 18:36 # 0
3.14159265 14.05.2013 19:09 # +2
рнр, сойдёт?
LispGovno 14.05.2013 19:14 # +1
scriptin 14.05.2013 19:29 # +1
bormand 14.05.2013 19:43 # 0
guest 14.05.2013 19:22 # 0
while(1);
пиши как хочешь, я пошел лесом
bormand 14.05.2013 19:22 # +1
guest 14.05.2013 19:32 # 0
..всё так предсказуемо в этом мире