|
01.07.2008, 16:43 | #1 |
MCTS
|
Break прерывает не только циклы
Случайно наткнулся. Код тоже прерывается...
|
|
01.07.2008, 16:50 | #2 |
Боец
|
какой break?
Ctrl+Break или breakpoint (reserved word) ? |
|
01.07.2008, 16:52 | #3 |
MCTS
|
который в исходном коде:
X++: break; |
|
01.07.2008, 17:00 | #4 |
Участник
|
|
|
01.07.2008, 17:02 | #5 |
Участник
|
|
|
01.07.2008, 17:02 | #6 |
MCTS
|
Действительно, вываливается, не посмотрел... По-моему все равно не логично такое поведение, напоминает goto.
|
|
01.07.2008, 17:02 | #7 |
Боец
|
Да, break прерывает нейкий "логический уровень". Например break спровоцирует выход из метода, если вставлен не в цикл или switch.
Я видел как с помощью прерывают работу методом вместо return. Но это не хорошо. IMHO Его нужно юзать там где это принято - switch. Во всех остальных случаях не поддаваться на соблазн его использования. |
|
01.07.2008, 17:07 | #8 |
Участник
|
Цитата:
Оператор BREAK был найден вне допустимого контекста (операторы SWITCH, WHILE, DO и FOR). Мягко говоря, я в шоке... Не только. Можно в ЛЮБЫХ циклах использовать. |
|
01.07.2008, 17:05 | #9 |
MCTS
|
и c continue та же история, причем выходит, что два оператора выполняющие по сути разные функции, тут срабатывают одинаково
|
|
01.07.2008, 17:09 | #10 |
MCTS
|
X++: ? |
|
01.07.2008, 17:10 | #11 |
Боец
|
break - прерывание
continue - переход на следующую итерацию. Если следующей итерации нет, то равносильно break |
|
02.07.2008, 00:17 | #12 |
очами вижу
|
Цитата:
Вообще, такая находка показывает недоработанность синтаксиса языка. Очень плохо, что разработчики не заметили такой проблемы. |
|
02.07.2008, 00:24 | #13 |
Axapta
|
Полагаю, при выполнении выкинет стандартную ошибку, что функция не содержит команды возврата. Ну или как-то так. Как будто вы просто return не написали. Никакого null'a, конечно, не будет.
|
|
02.07.2008, 11:34 | #14 |
Боец
|
Цитата:
IMHO Его нужно юзать там где это принято - switch.
Цитата:
Не только. Можно в ЛЮБЫХ циклах использовать.
|
|
02.07.2008, 14:55 | #15 |
очами вижу
|
Цитата:
Сообщение от DSPIC
Можно-то можно, и в С оператор goto использовать никто не запрещает, но правильнее было бы (это моё субъективное мнение) поставить более красивое условие выхода из цикла вместо использования break, который часто ломает логику. Я к тому чтобы использовать break, если уж без него никак, а не лепить где попало.
Так что break и continue зачастую позволяют написать более легкий для чтения код. Что лучше: X++: for (int i = 0; i < m; ++i) { if (array[i] <= 0) continue; // do something with array[i] // lot's of code } // или for (int i = 0; i < m; ++i) { if (array[i] > 0) { // do something with array[i] // lot's of code } } |
|
02.07.2008, 15:23 | #16 |
Участник
|
Цитата:
Сообщение от RumataEstor
В тех же "Best Practices" от разработчиков Аксапты пишут, что рекомендуется прерывать блок обработки как можно раньше. И желательно обходиться без лишней лесенки в коде (высокой степени вложенности блоков).
Так что break и continue зачастую позволяют написать более легкий для чтения код. (...) Огород в условии цикла совсем не улучшает читаемость кода. А главное помнить, что код для того, чтобы его читать человеку. Для написанния кода (кроме очевидного факта его работоспособности) существуют два основных пожелания: - Код должен быть "читабельным". Т.е. его можно легко понять - Код должен быть модифицируемым. Т.е. его можно легко изменить Так вот, факт прерывания цикла может как улучшить, так и ухудшить обе эти характеристики. В зависимости от конкретной задачи Поэтому данная рекомендация - эта одна из тех рекомендаций, которую нельзя применять "в лоб". Не обдумав все последствия. Как минимум, она очень спорная. |
|
02.07.2008, 15:33 | #17 |
Участник
|
С моей точки зрения 2. лучше:
- там блок, который пропускается явно отделен отступом - там нет ифа в строчку без отступа и скобок - если захочется что-то вставить в конец каждой итерации цикла, то это можно будет сделать не анализируя читая весь код тела цикла выше, нет ли там continue лично я иногда пользуюсь break (когда речь идет про поиск обычно), continue - вообще никогда |
|
02.07.2008, 15:54 | #18 |
MCTS
|
X++: - , goto |
|