Урок 70. Операторы break и continue

   ⁄ 

 Обновлено 5 Июл 2017

  ⁄   

Хотя вы уже видели оператор break в связке с оператором switch, все же он заслуживает большего внимания, поскольку может использоваться и с другими типами циклов. Оператор break приводит к завершению выполнения циклов do, for, switch или while.

Break и switch

В контексте оператора switch break обычно используется в конце каждого кейса для его завершения (что предотвращает fall-through):

Break и циклы

В контексте циклов оператор break используется для завершения работы цикла раньше времени:

Эта программа позволяет пользователю ввести до 10 чисел и в конце подсчитывает их сумму. Если пользователь введет 0, то выполнится break и цикл завершится (не важно, сколько чисел в этот момент успел ввести пользователь).

Обратите внимание, оператор break может использоваться и для выхода из бесконечного цикла:

Break и return

Новички часто путают или не понимают разницы между break и return. Оператор break завершает работу switch-а или цикла, и выполнение кода продолжается с первого стейтмента, который находится сразу после этого же switch-а или цикла. Оператор return завершает выполнение всей функции, в которой находится цикл, и выполнение продолжается в точке, где была вызвана эта функция.

Continue

Оператор continue позволяет сразу перейти в конец тела цикла, пропуская весь код, который находится под ним. Это полезно в тех случаях, когда мы хотим завершить текущую итерацию раньше времени.

Например:

Эта программа выведет все числа от 0 до 19, которые не делятся нацело на 4.

В случае цикла for часть инкремента/декремента счетчика по-прежнему выполняется даже после выполнения continue (так как инкремент/декремент происходит вне тела цикла).

Будьте осторожны при использовании оператора continue с while или do while. Поскольку в этих циклах инкремент счетчиков выполняется непосредственно в теле цикла, то использование continue может привести к тому, что цикл станет бесконечным! Рассмотрим следующую программу:

Предполагается, что программа выведет все числа от 0 до 9, за исключением 5. Но на самом деле:

0 1 2 3 4

А затем цикл станет бесконечным. Когда значением count станет 5, условие оператора if станет true, выполниться continue и цикл, пропуская вывод числа и инкремент счетчика, перейдет к следующей итерации. Переменная count так и не увеличиться. Как результат, в следующей итерации переменная count по-прежнему останется со значением 5, оператор if по-прежнему останется true, и цикл станет бесконечным.

А вот правильное решение, но с использованием цикла do while:

Результат:

0 1 2 3 4 6 7 8 9

Использование break и continue

Многие учебники предупреждают не использовать break и continue, поскольку они приводят к произвольному перемещению точки выполнения программы по всему коду, что усложняет пониманию и следованию логике выполнения такого кода.

Тем не менее, разумное использование break и continue может улучшить читабельность циклов в программе, уменьшив при этом количество вложенных блоков и необходимость в сложной логике выполнения цикла.

Например, рассмотрим следующую программу:

Эта программа использует логическую переменную для выхода из цикла, а также вложенный блок, который запускается только в том случае, если пользователь не использует символ выхода.

А вот версия более читабельной программы, но с использованием оператора break:

В этой версии программы (с одним оператором break) мы избежали использования как логической переменной (а также понимания того, зачем она и где используется), так и оператора else с вложенным блоком.

Уменьшение количества используемых переменных и вложенных блоков улучшают читабельность и понимание кода больше, чем break или continue могут нанести вред. По этой причине мы считаем приемлемым их разумное использование.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (7 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *