Хотите получать новые статьи блога
прямо себе на почту?
Укажите свой e-mail:


WorldSkills Russia
Яндекс.Метрика Интернет-издание Профобразование

Операторы передачи управления

0

Лекция №9

Тема: Операторы передачи управления

План:

  1. Оператор безусловного перехода goto
  2. Операторы break и continue
  3. Оператор возврата из метода return
  4. Оператор генерации исключения throw

В C# есть несколько операторов, изменяющих естественный порядок команд:

  • оператор безусловного перехода goto;
  • оператор выхода break;
  • оператор перехода к следующей итерации цикла continue;
  • оператор возврата из метода return;
  • оператор генерации исключения throw.

1. Оператор безусловного перехода goto

Оператор goto передаёт управление меченному оператору.

Его синтаксис:

[c-sharp]
goto <Метка>;
[/c-sharp]

В теле той же функции должна присутствовать ровно одна конструкция вида:

[c-sharp]
<Метка>: <Оператор>;
[/c-sharp]

Здесь:

  • goto — зарезервированное слово;
  • <Метка> — метка оператора.

Метка — это уникальный идентификатор, предшествующий оператору и отделённый от него символом двоеточия.

[c-sharp]
goto label1;
… //эти операторы пропускаются
label1: …; //этот оператор получает управление
[/c-sharp]

Два других способа использования goto:

  • передача управления в case:
  • [c-sharp]
    goto case <Константное_выражение>;
    [/c-sharp]
  • передача управления в ветвь:
  • [c-sharp]
    goto default;
    [/c-sharp]
Оператор перехода goto следует применять лишь в исключительных ситуациях, т.к. он делает логику программы запутанной и способствует появлению трудно обнаруживаемых ошибок перехода исполнения.
Эдгер Дейкстра

«О вреде оператора goto» и о том, как можно обойтись без него, писал ещё Эдгер Дейкстра при обосновании принципов структурного программирования:

Я уже многие годы не применяю этот оператор и считаю, что хороший стиль программирования не предполагает использования этого оператора в C# ни в каком из вариантов — ни в операторе swith, ни для организации безусловных переходов.

Историческая справка:

В начале 60-х годов прошлого столетия после появления языка АЛГОЛ-60 и других языков высокого уровня во многих компаниях, занимающихся разработкой программ, существовало правило «программировать без goto». Иногда это правило было директивным: руководство отказывалось принимать программы в которых имелся этот оператор.

2. Операторы break и continue

В структурном программировании признаются полезными «переходы вперёд» (но не назад), позволяющие при выполнении некоторого условия выйти из цикла, из оператора выбора, из блока. Для этих целей можно использовать оператор goto, но лучше применять специально предназначенные для этих целей операторы break и continue.

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

При выполнении оператора break в теле цикла завершается выполнение самого внутреннего цикла. В теле цикла, чаще всего, оператор break помещается в одну из ветвей оператора if, проверяющего условия преждевременного завершения цикла.

Оператор continue используется только в теле цикла. В отличие от оператора break, завершающего внутренний цикл, continue пропускает все операторы, оставшиеся до конца тела цикла, и передаёт управление на начало следующей итерации (повторение тела цикла.)

3. Оператор возврата из метода return

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

Его синтаксис:

[c-sharp]
return [Выражение];
[/c-sharp]

Здесь:

  • return — зарезервированное слово;
  • <Выражение> — выражение того же типа, что и метод-функция.

Более подробно данный оператор будет рассмотрен позже.

4. Оператор генерации исключения throw

Как устроен и работает данный оператор, читайте в Лекции №10.