- 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);
Я про общий случай.
Хотя, конечно, без неё теоретически можно всегда обойтись. Ценой лесенки отступов.
В общем случае она тоже не нужна. В 80% случаев лесенка больше 3 уровней заставляет задуматься о функциях (ну по крайней мере меня).
P.S. Ну не только лесенкой, но и ретурнами можно.
где-то я читал, что правильней иметь только одну точку возврата
это нужно для языков, которые ниасисли RAII
сисли?
ниа!
А я где-то читал, что goto не нужно юзать...
Если серьезно - все хорошо в меру ;) И поэтому я стараюсь писать так, как потом будет легче читать, а не так, как наставляет нас какой-то очередной лжекодобожок. И ебал я в рот все эти религии флагоебов-брейконенавистников, негоутушников и одновозвратников...
P.S. Безусловно, во всех этих советах есть доля истины - они страхуют новичка от слишком частого использования goto, return и прочих мощных синтаксических конструкций, которые при неправильном использовании превратят код в лапшу. Но надо понимать, что это не закон, а всего лишь подсказка...
Преждевременная оптимизация? Или инлайн тут преследует какие-то более высокие цели?
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).... еще вспомню свои грехи - расскажу.
do(smth());
Ну а почему нет? Если там, конечно, не получается километровая строка.
> prop() и prop(val) вместо каноничных getProp() и setProp(val)
В бусте, кстати, местами такие юзают.
P.S. Под "инлайню" я обычно подразумеваю - копипащу тело функции целиком в точку вызова.
Но да, для мозга, изъеденного червями, это очень сложно - понять, когда религия неготоизма мешает целесообразности.
изъебанного паттернами и принесенного на алтарь кодорелигиозных божков
Обычно или это что-то вообще не нужно, и можно не парясь напихать ретурнов.
Или это что-то стоит после каждой веточки, в духе и тогда или лесенка, или кресто-RAII, или вынос кишков в осмысленную функцию..
А continue? Его-то ретурном не заменишь.
Особенно continue на новую итерацию одного из вышележащих циклов.
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
Ну вот, практически эталонный пример.
Или же то что стоит за циклом завёрнуто в такую хитрую конструкцию как for-else, тем самым оно не сработает от бряка.
В принципе каждый кодер выкручивается по-своему, вот в бейсике/фортане есть exit do/for/while или continue. Если замиксовать разные циклы, то можно, опять-таки обойтись без goto (в 95% тройной вложенности достаточно).
В руби там вообще экзотика retry всякие.
Только сишкобляди и поцкалики ебутся с goto.
А все настоящие пацаны уже давно используют COME FROM
Apache StringUtils
Уже давно хочу запилить свой велик и проверить насколько обгонит стандартный метод в лоб.
Проблема жабы тут в том что надо сделать 10 методов
1 на Object и на все примитивные типы. В том числе и char.
Яркий пример - класс java.util.Arrays.
Только его средствами indexOF получается слишком тупым:
Arrays.asList(array).indexOf(val);
Arrays.binarySearch(Arrays.sort(array), val);
Да выбешивал раньше.
Особенно попытки соотвествия типов и их обёрток.
Ну сделайте вы хотя бы для унификации:
тип <-> Тип //полезно для рефлексии
Нет, блядь int vs Integer. char vs Character. Итд.
boolean вон удлинили... а int и char остались как есть.
Сцуки. А я так люблю писать bool.
Полагаю да. Не вся жаба серверная, и не вся умеет инлайнить сама.
Бугага. Просто признай что в Аде нету ни обычного continue, ни continue на конкретный цикл.
Если ифов будет не два, а десяток, то при классической схеме появятся многократно вложенные фигурные скобки, а здесь хватит и одной пары скобок в do { ... } while. Программирование с goto, но без goto. Можно писать спагетти-код, не используя ни одной метки.
Только в быдлоязыках в которых нет break на метку, если я правильно понял о чем вы.
Исключения - только для исключительных ситуаций. Для обработки штатного события использовать исключения - это полное мудачество!
А обработчиков по сути всего 1-2, которые или откатывают текущую транзакцию\операцию, или рвут сессию, или крашат прогу, в зависимости от фатальности.
Согласен.
>Исключения - только для исключительных ситуаций.
Согласен вдвойне.
Но в путхоне как вижу - нормальная практика.
http://stackoverflow.com/questions/653509/breaking-out-of-nested-loops
А вот и разгадка! Гвидо сказал что break на метку "слишком сложно", быдлопитонисты и девы языка не осилят.
И началось "в кривых руках" это не будет нормально использоваться, "Lazy programmers are everywhere" итд.
Так про любую фичу можно сказать. "Bydloprogrammers are everywhere" - универсальный аргумент против любой конструкции вообще!
>родство
уродство
А в ситуации где исключения логически не подходят... цепочка if'ов плюс функции, наверно.
Для ущербного языка, где break может задавать только нечитаемый уровень вложенности - да, нормальный такой костыль.
http://ideone.com/V0PSqV
ПЫХОПРОБЛЕМЫ
И тут же вопрос: зациклится ли такой код?
Правильно зацикливать - continue, но его без цикла не сделаешь.
В общем хоть что-то в жабе сделали очень грамотно - goto вырвали с корнем и запретили, но сделали "структурные" переходы на начало/конец именованного блока.
Тем более что другие "современные" сишкоблядские (PHP,С#) языки так и до сих пор (2013) не осилили выход по метке. О крестах и сишке я молчу.
И спору нет, по мне ада гораздо приятнее срамного поцкаля.
Вот:
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.
Проблема зависания нашлась за десять минут без отладчика, после чего почему-то сразу вспомнился Тарас.
это убожество в данном случае, так как этот оператор предназначен как цикл, а не костыль для здорового
нужно было использовать
try { }
catch(Exception $e) {}
Именно то об чем выше писал Тарас.
Тем более что исключения и пхп, эмм...
Ну обработка ошибок в пхп явно сишкоблядская и потому даже исключения не спасут отца русской демократии.
Зато он не использовал goto и его духовный брахман не будет его ругать.
Спаси мир от кошачьей экспансии. Юзай goto!
если говорить как я написал бы, то выглядело бы так
$useDummy = true;
@include_once $filename;
if(class_exists($className)) {
$useDummy = false;
}
рнр, сойдёт?
while(1);
пиши как хочешь, я пошел лесом
..всё так предсказуемо в этом мире