Выбрать главу

и заметим, то вряд ли сможем оценить содержимое окна. Поэтому

мы проявляем военную хитрость — добавляем инструкцию Console.

ReadLine(),  которая  формально  означает  считывание  введенного

пользователем текста. Но этот текст никуда не записывается и сам

по себе нас не интересует. Это лишь повод не закрывать консольное

окно.

Если пользователь не ввел команду exit, команда break в условном опера-

торе не выполняется и оператор цикла продолжает свою работу. Командой

50

Глава 1. Информация к размышлению: язык C# и даже больше

op=Char.Parse(text) выполняется попытка преобразовать значение тек-

стовой переменной в text в символьное значение. Для этого используется

статический метод Parse() класса Char. Аргументом указывается перемен-

ная text. Затем на сцену выходит еще один условный оператор. В нем про-

веряется сложное условие !(op=='+'|op=='-'|op=='*'|op=='/'). Восклица-

тельный знак ! является оператором логического отрицания. Вертикальная

черта | является оператором логического или. Двойное равенство == есть не

что иное, как логический оператор равенства. Поэтому, например, выраже-

ние op=='+' равно true, если значение переменной op равно '+', и false, если

не равно. Выражение op=='+'|op=='-' равно true, если значение переменной

op равно '+' или '­' (и false во всех остальных случаях). Значение выраже-

ния op=='+'|op=='-'|op=='*'|op=='/' равно true, если переменная op равна

'+', или равна '­', или равна '*', или равна '/'. Оператор логического отри-

цания ! превращает true в false и false в true. Поэтому значением выраже-

ния !(op=='+'|op=='-'|op=='*'|op=='/') будет true, только если переменная

op не равна ни одному из символьных значений '+', '­', '*' или '/'. Други-

ми словами, значение выражения равно true, если мы ввели неправильный

символ операции. В этом случае благодаря условному оператору выводится

текстовое сообщение "Такая операция недопустима!" и инструкцией break завершается работа оператора цикла. Еще один способ цивилизованно вый-

ти из бесконечного циклического процесса — ввести некорректный символ

арифметической операции.

Блок try-catch предназначен, как уже отмечалась, для обработки ис-

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

элегантная  и  мощная  встроенная  система  обработки  ошибок.  Ба-

зируется она как раз на конструкции try-catch. Основная идея, за-

ложенная в процедуру обработки ошибок, достаточно проста и эле-

гантна. Программный код, который может при выполнении вызвать

ошибку,  заключается  в  блок  try.  После  try-блока  обычно  следует

несколько catch-блоков. Каждый catch-блок предназначен для об-

работки ошибки определенного типа. Если в try-блоке в процессе

выполнения программы возникает ошибка, код try-блока перестает

выполняться, а вместо этого выполняется код соответствующего типу

ошибки catch-блока. В рассматриваемом примере использован всего

один catch-блок, который предназначен для обработки всех ошибок, которые могут возникнуть при выполнении программы.

Нам осталось разобрать только программный код в catch-блоке. Там всего

одна инструкция Console.WriteLine("Выполнена недопустимая команда."), которая выполняется, если при выполнении команд в блоке try возникнет

ошибка — любая. Если ошибка возникла, выполнение команд в try-блоке

Консольная программа           51

прекращается и выполняются команды в catch-блоке. После этого выпол-

няются команды, которые находятся после конструкции try­catch. Если

же при выполнении try-блока ошибки не возникают, catch-блок не выпол-

няется. С помощью такой нехитрой конструкции мы обеспечиваем более

устойчивую работу программы.

Протестируем работу программы. Для начала выделим несколько показа-

тельных ситуаций:

 если вместо символа операции мы введем слово exit, работа программы

будет завершена;

 если мы введем некорректный символ операции, работа программы будет

завершена;

 если мы введем некорректное число, программа будет завершена.

Реализуем каждую из этих гипотетических ситуаций. На рис. 1.15 показа-

на ситуация, когда работа программы завершается вследствие ввода клю-

чевого слова exit.

Рис. 1.15.  Работа программы завершена инструкцией exit На рис. 1.16 проиллюстрировано, что произойдет, если мы введем некор-