В то время как l oop заканчивается переключателем: я должен использовать «break» или «continue» для завершения дел? - PullRequest
0 голосов
/ 02 марта 2020

Вопрос любопытства, и довольно простой.

Предполагая, что у меня есть while l oop, и последний фрагмент кода, выполненный внутри этого l oop, является оператором switch, если я fini sh мои case блоки с break или с continue?

Результат выполнения практически такой же, насколько я могу судить. Один из них быстрее? Есть ли странные крайние случаи?

while (ShouldLoop)
{
     switch (myInt)
     {
         case 0:
             doStuff();
             break; // or continue?
         default:
             break; // that is the question.
     }
 }

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

continue всегда будет воздействовать на включающий while l oop, независимо от того, где вы разместите его в своем коде, инструктируя компилятору продолжить следующую оценку ShouldLoop, останавливая выполнение любого кода после продолжения. С другой стороны, break действует иначе, если вы поместите его на 1-й уровень вашего while l oop, где он просто выйдет из l oop, тогда как размещение его внутри switch-case остановит оценку и выйдите из switch-case, как только компилятор встретит ключевое слово.

Как указывал @ simon-pearson, могут быть случаи, когда continue внутри switch-case будет иметь смысл, но это определенно не читаемый код и такие сценарии использования должны быть заменены другим обходным путем. Обычно, switch-case должен быть написан с break.

2 голосов
/ 02 марта 2020

Почти наверняка вы должны заканчивать свои блоки оператора case с break. Рассмотрим два сценария ios:

  • Если все, что важно, это то, что вы не проваливаетесь под приведенными ниже case утверждениями, тогда вам следует использовать break.
  • You Мы предоставили неполный пример кода, и после оператора switch может быть код, который вы хотите пропустить в определенных случаях. В этом сценарии оператор continue был бы более подходящим, чем приведенный выше сценарий, но это уже звучит как спагетти. Если бы это было так, вам, вероятно, лучше установить логическую переменную в блоке операторов case и использовать break. Затем вы можете обернуть следующий код с помощью оператора if для этого логического флага.

Это немного субъективно, потому что оба «работают», но у одного гораздо более ясное намерение IMO.

...