Неплохо ли использовать стиль "return", чтобы разбить цикл for на Java?
Я делаю проект с базовой Java для класса CS. Проект имеет цикл for, вложенный внутри цикла while.
Я не разрешен использовать break
как способ завершения цикла for в начале. Я обнаружил, что return
, похоже, имеет тот же эффект, что и break
. Неплохо ли использовать стиль return
как разбить цикл?
Мой цикл for должен проверять три разных оператора, но если он найдет тот, который является истинным, он должен немедленно закончить, не продолжая проверять остальные утверждения.
Я попытался поместить логический оператор в цикл while, который управляет циклом for, но не контролирует, что происходит внутри цикла for, пока цикл for не завершится до конца.
Также имеет значение, если return
ничего не возвращает?
299/01/11
Обновление: Спасибо всем за ваши комментарии. Мне было очень полезно прочитать все дебаты.
Я поговорил с моим наставником, и выясняется, что для получения полных знаков я не должен использовать return
.
Итак, я нашел совет по настройке логического в цикле "for" действительно полезным, поскольку я не знал, что вы могли бы это сделать.
Ответы
Ответ 1
Они будут эквивалентны только в том случае, если первая вещь после выхода из цикла - это инструкция return
.
В любом случае, если ваш лектор не разрешает break
, они, вероятно, не разрешат return
.
Вы должны знать, что эти правила имеют хорошую основу для них (для предотвращения спагетти кода и упрощения написания поддерживаемого кода), но иногда они принудительно исполняются.
Например, в сегменте нет ничего нечитаемого:
if (x == 0)
return 0;
return x - 1;
хотя он имеет несколько операторов return
.
Предполагаемое предпочтительное решение для группы с множественным возвратом выглядит примерно так:
int y = x - 1;
if (x == 0)
y = 0;
return y;
который, на мой взгляд, является как менее удобочитаемым, так и пустой тратой пространства.
Реальные проблемы возникают, когда у вас очень сложная логика, и обручи, которые люди перескакивают, чтобы избежать break
и/или return
, приводят к условностям, которые почти нечитабельны.
Слушайте своего лектора - они, в конце концов, контролируют то, что вы получаете. Затем, как только вы попадете в реальный мир, вы можете перейти от догматизма к прагматизму и составить свой собственный разум.
См. здесь за хороший совет по этим вопросам за пределами учебных заведений.
Ответ 2
Прежде всего, это не плохой стиль для использования break
, если вы используете его разумно.
Хотя я понимаю, почему ваш профессор настаивает на кодировании без break
пока (потому что так много людей, особенно новичков, склонны "злоупотреблять" ), нет никаких оснований для его запрещения полностью.
Неужели это плохой стиль, чтобы использовать return как способ разбить цикл?
Лично я думаю, что все будет хорошо: код станет проще. Но, очевидно, ваш профессор является высшим авторитетом здесь. Весь вопрос очень субъективен, поэтому я не могу сказать ему.
Но опять же, независимо от того, что ваш профессор говорит, использование return
в цикле не плохой стиль.
Ответ 3
Этот вопрос, кажется, входит в территорию очень старого, еще неразрешенного аргумента, " Одиночный и множественный точки выхода метода".
Итак, если использование возврата в цикле беспокоит вас (или вашего учителя), вы (или он) могли бы выглядеть здесь.
Чтобы ответить на ваш вопрос.
В моем (и не только моем) мнении с использованием возврата в цикле определенно хорошо.
Помните, однако, что чрезмерное использование может снизить читаемость кода (см. связанный ответ для деталей/примеров).
Ответ 4
С точки зрения пуриста, разрыв нельзя использовать. Точка цикла while - это то, что вы используете условие в начале цикла, чтобы вырваться из него, и что-то может запутаться, если вы начнете наводнять ваш цикл выражениями break в качестве противопоставления правилу условия (которое у учеников быстрого взлома может возникнуть соблазн использовать, если они не могут решить, как правильно поступать!) То же самое касается продолжения и возвращения в середине циклов.
Все эти языковые функции существуют по какой-то причине и да, иногда это лучший способ сделать что-то. Однако, только когда вы начинаете, шансы на то, что вы используете их разумно и правильно, редки, их скорее всего будут использовать в качестве бесплатного "взлома, чтобы вытащить меня из тюрьмы, не понимая, как это работает". И это, я бы сказал, является достаточно хорошей причиной для запрета их использования в базовых курсах программирования.
Ответ 5
break
и return
не совпадают. break
остановит выполнение цикла самого внутреннего цикла, return
вернется из текущего метода, т.е. ничего больше в методе не будет выполнено. Насколько я знаю, нет ничего плохого в использовании перерыва в цикле; по-видимому, это искусственное требование, чтобы заставить вас думать об альтернативной логике. И нет ничего плохого в использовании return
; это избавит вас от ужасных вложенных условностей (if
clauses).
Ответ 6
Если вам не разрешено использовать break
, то имеет смысл не использовать return
, так как каждый цикл с break
можно переписать в виде цикла с return
(путем передачи его на аутсорсинг отдельная функция).
С точки зрения без домашней работы break
(и return
) очень полезны языковые функции, которые обычно не считаются плохим стилем (разумеется, любая конструкция языка может быть использована для написания плохого кода).
В вашем домашнем сценарии, однако, я думаю, что это может привести к тому, что домашняя работа приведет к простому "обходу" отсутствующего break
с помощью return
. Вы должны подумать об альтернативном способе решения своей задачи.
Я попытался поместить логический оператор в цикл while, который управляет циклом for, но не контролирует, что происходит внутри цикла for, пока цикл for не завершится до конца.
Это правда, но, используя оператор if
, вы также можете выполнить/не выполнять код внутри цикла в зависимости от вашего логического значения.
Ответ 7
Также имеет значение, если 'return' ничего не возвращает?
Это зависит от типа возвращаемого метода. если тип возврата недействителен, предложение return должно быть пустым:
return;
в противном случае предложение return должно возвращать требуемый тип, например.
return true; // legal for boolean return type
return null; // legal for all object types
return "Hello"; // legal if return type is String
Ответ 8
Вы можете рано завершить цикл for, подобный этому
for (int i = 0; i < SOMELIMIT && (!found); ++i) {...}
Ответ 9
Я бы предположил, что ваш наставник хотел, чтобы вы использовали условие break в части условия цикла for. Вам необходимо объявить это условие перед циклом и изменить его внутри цикла.
boolean stop = false;
for (...; ... && !stop; ...) {
...
if (...) {
stop = true;
}
}
Ответ 10
Это идеальный код.
for(int i; i < stop; i++) {
boolean flag = true;
while(flag && condition) {
//some action
if(shouldIstop) {
flag = false;
}
}
}
Когда вы устанавливаете флаг в false, вы выйдете из while, когда вы установите я на остановку, тогда вы также выйдете из for.
Ответ 11
Вы получите тот же результат, но качество кода и четкость уменьшатся.