Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП - lab2.doc
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
1.08 Mб
Скачать

Цикл перебора 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# на редкость неудачна, и наличие в нем оператора безусловного перехода затрудняет понимание программы, поэтому лучше обходиться без него.