Зачем нужен continue? (Наглядный пример)

138
30 июня 2019, 19:00

У меня такая ситуация,что нужно объяснить концепцию операторов break/continue(зачем они нужны и как работают),с первым все понятно,а со вторым возникают проблемы с наглядным примеров использования на практике.

Вопрос: Можете подсказать какой-нибудь наглядный пример где без него никак не обойтись?

PS в гугле все примеры высосаны из пальца либо не совсем понятно зачем "он" здесь нужен

PSS пример его работы в реальной программе(любой)

Answer 1

При грамотном составлении условий, в операторе continue нет "необходимости". Сколько примеров не видел - везде можно было обойтись без него, поменяв немного условия. Но вот облегчить жизнь этот оператор может.

Первый пример, который приходит в голову - выйти из текущей итерации по условию:

for(...) {
    if(condition)
        continue;
    // code
}

Но данная ситуация не нуждается в continue, ведь проще в данном случае сделать отрицание условия и он даже не понадобится:

for(...) {
    if(!condition){
        // code
    }
}

Более "адекватный" пример использования, но менее очевидный - улучшение читаемости циклов с большим числом вложенности условий. Представим пример:

for(...) {
    // code 0
    if(condition1){
        // code 1
        if(condition2){
            // code 2
            if(condition3){
                // code 3
            }
        }
    }
}

Выглядит не очень "читаемо" даже без, собственно, самого кода внутри этих условий. Оператор continue позволяет эту пирамиду превратить в код вообще без вложенности:

for(...) {
    // code 0
    if(!condition1)
        continue;
    // code 1
    if(!condition2)
        continue;
    // code 2
    if(!condition3)
        continue;
    // code 3
}

Стоит отметить, что данный код выглядит несколько нестандартно что ли. Лично я видел такое буквально пару раз, уж не знаю, с чем это связано :)

Answer 2

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

Пример:

for (int i = 0; i < 100; i++)
{
    // Печатаем в консоль сообщение о начале цикла.
    Console.WriteLine("Iteration begin.");
    // Проверяем если i между 20 и 30, то прерываем дальнейшее выполнение цикла и переходим к следующей итерации.
    if (i > 19 && i < 31)
        continue;
    // Печатаем в консоль сообщение об окончании цикла.
    Console.WriteLine("Iteration begin.");
}

В результате для значений переменной i между 20 и 30 включительно в консоль будет выводиться только первое сообщение из цикла. Код цикла следующий после оператора continue будет пропускаться по выполнению условия, а указатель следующей строки для выполнения будет указывать на первую строку текущего цикла.

Answer 3

Оператор continue нужен для пропуска 1 итерации в цикле, чаще всего за каким либо условием.

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

Обычно когда хотят показать "работоспособность" этих двух операторов приводят в пример самый обычный цикл for. Давайте для начала так и сделаем.

Вот первый пример с оператором break.

Может быть (все может быть) ,что программисту встала задача вывести все числа от 0 до 10, но если условие вдруг срабатывает, срочно остановить выполнение цикла.

for (int i = 0; i < 10; i++)
{
    if (i == 7)//То самое условие
        break;//Тот самый break
    Console.WriteLine(i);
}

Вывод таков:

0
1
2
3
4
5
6

Все как нам и нужно было. Как только условие выполнилось, процесс выполнения цикла прекратился.

Теперь с оператором continue. Теперь нашему программисту понадобилось выполнять цикл до конца и проводить какие-то операции со счётчиком. Но как только выполняется условие, приступить к следующей итерации, пропуская эту.

Вот пример кода с выводом.

for (int i = 0; i < 10; i++)
{
    if (i == 7)//То самое условие
        continue;//Тот самый continue
    Console.WriteLine(i);
}

Вывод:

0
1
2
3
4
5
6
8
9

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

Так вот отвечаю.

Если изобразить цикл с обоими операторами, то вид будет таков для continue:

       условие
          |
=========   ========

А такой для break:

       условие
          |
=========  

Удачи в изучении C#.

SeeSharp

READ ALSO
Бинарные деревья. Удаление узла с двумя потомками

Бинарные деревья. Удаление узла с двумя потомками

Мне необходимо удалить узел дерева, если у него имеются двое детейНаходил примеры удаления на других языках, но без понятия, как это реализовать...

120
Добавление записи в таблицу и на страницу с помощью ajax

Добавление записи в таблицу и на страницу с помощью ajax

Изучаю javascriptДобрался до ajax запросов

145
Как парсить сайты с авторизацией?

Как парсить сайты с авторизацией?

Парсер с использованием Anglesharp

147
Не работает условие (Unity)

Не работает условие (Unity)

Почему не работает условие?

119