- •Цикл предусловием while
- •Цикл с постусловием do…while
- •Цикл с параметром for
- •Цикл перебора foreach
- •Рекомендации по выбору цикла
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Порядок выполнения лабораторной работы
- •Задания к лабораторной работе.
- •Пример решения варианта 0.
- •Листинг 2.5 – Задание 1.
- •Листинг 2.7 – Задание 2
Цикл перебора foreach
Цикл foreach используется для просмотра всех объектов из некоторой группы данных, например массива, списка или другого контейнера. Он будет рассмотрен, когда у нас появится в нем необходимость.
Рекомендации по выбору цикла
Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае. Оператор do…while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз, например, если в цикле производится ввод данных. Оператором while удобнее пользоваться в тех случаях, когда либо число итераций заранее неизвестно, либо очевидных параметров цикла нет, либо модификацию параметров удобнее записывать не в конце тела цикла. Оператор foreach применяют для просмотра элементов различных коллекций объектов. Оператор for предпочтительнее в большинстве остальных случаев. Однозначно для организации циклов со счетчиками, то есть с целочисленными переменными, которые изменяют свое значение при каждом проходе цикла регулярным образом (например, увеличиваются на 1).
Начинающие часто делают ошибки при записи циклов. Чтобы избежать этих ошибок, рекомендуется:
проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого правильные начальные значения (а также возможно ли выполнение других операторов);
проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;
предусмотреть аварийный выход из цикла по достижении некоторого количества итераций (пример приведен в следующем разделе);
и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки.
Операторы передачи управления
В C# есть пять операторов, изменяющих естественный порядок выполнения вычислений:
оператор безусловного перехода goto;
оператор выхода из цикла break;
оператор перехода к следующей итерации цикла continue;
оператор возврата из функции return;
оператор генерации исключения throw.
Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.
Первые четыре оператора рассматриваются в этом разделе, а оператор throw несколько позже.
Оператор goto
Оператор безусловного перехода goto используется в одной из трех форм:
goto метка;
goto case константное выражение;
goto default;
В теле той же функции должна присутствовать ровно одна конструкция вида: метка: оператор;
Оператор goto метка передает управление на помеченный оператор. Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода. Использование этой формы оператора безусловного перехода оправдано в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких точек функции вниз по тексту в одну точку (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование оператора goto приводит только к усложнению структуры программы и затруднению отладки. Применение этого оператора нарушает принципы структурного и модульного программирования, по которым все блоки, образующие программу, должны иметь только один вход и один выход.
Вторая и третья формы оператора goto используются в теле оператора выбора switch. Оператор goto case константное_выражение передает управление на соответствующую константному выражению ветвь, а оператор goto default – на ветвь default. Надо отметить, что реализация оператора выбора в C# на редкость неудачна, и наличие в нем оператора безусловного перехода затрудняет понимание программы, поэтому лучше обходиться без него.