Урок 31. Оператор goto в C#


В тридцать первой части учебника по основам C# рассматривается использование оператора перехода "goto". Эта команда редко применяется и часто ей пренебрегают, но она предоставляет ценную функцию при использовании с оператором switch для управления течением программы.

Спагетти-Код

Оператор goto - это простая команда, которая безоговорочно передает управление программой другому оператору. Команда часто подвергается критике со стороны некоторых разработчиков, выступающих за ее удаление из всех языков программирования высокого уровня, потому что это может привести к спагетти-коду. Это происходит, когда существует так много операторов goto или подобных операторов перехода, что код становится трудно читать и поддерживать. Однако есть программисты, которые отмечают, что оператор goto, при осторожном использовании, обеспечивает элегантное решение некоторых проблем.

Базовый синтаксис

Основной синтаксис оператора goto очень прост. Во-первых, метка должна быть создана в пределах кода. Это становится местом назначения для прыжка. Метка определяется путем указания имени, за которым следует двоеточие (:). Оператор goto ссылается на метку, как показано ниже:

Console.WriteLine("это будет выведено.");
 
goto myLabel;
 
Console.WriteLine("это не будет выведено.");
 
myLabel:
 
Console.WriteLine("это тоже будет выведено.");
Следует отметить, что метка назначения должна быть в том же методе, что и goto, который ее вызывает. В некоторых случаях метка должна находиться в одном и том же блоке кода.

Goto и Switch

При использовании switch для условной обработки каждый оператор case также определяет метку. Команда goto может использоваться для перехода между случаями, позволяя выполнять каскадную цепочку операторов case, а не один элемент. Оператор break не требуется в случае, который заканчивается goto.

В следующем примере показана инструкция switch, используемая для интерпретации кода состояния. В этом примере сначала выполняется обращение "Warn", а затем-обращение" Complete". Этот пример также показывает, как быстро код может стать трудным для чтения, если команда goto используется небрежно.

string statusCode = "Warn";
 
switch (statusCode)
{
    case "Warn":
        Console.WriteLine("Завершено с предупреждениями.");
        goto case "Complete";
    case "Err":
        Console.WriteLine("Завершено с ошибками.");
        goto case "Complete";
    case "Complete":
        Console.WriteLine("Завершено.");
        break;
    case "Fail":
        Console.WriteLine("Не удалось завершить.");
        break;
    default:
        Console.WriteLine("Неизвестный код состояния");
        goto case "Fail";
Примечание: команда goto может использоваться только для перехода между случаями, включая случай по умолчанию. Переходы в или из всего оператора switch не допускаются.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, уроки по си шарп, си шарп, goto, операторы




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Домены, apache и https
Приведение типов аргументов в C#
Безопасность http-запросов от яндекс денег