Шаг 34.
Язык программирования C#. Начала
Управляющие инструкции. Условная конструкция if

    На этом шаге мы рассмотрим синтаксис и использование этой конструкции.

    Условная конструкция позволяет выполнять разные блоки команд в зависимости от истинности или ложности некоторого условия (выражение со значением логического тина). Работает эго так: сначала вычисляется значение некоторого логического выражения (условие). Если значение выражения равно true (условие истинно), выполняется определенный блок команд. Если значение выражения равно false (условие ложно), выполняется другой блок команд.

    Описывается условная конструкция достаточно просто: указывается ключевое слово if, после которого в круглых скобках следует условие, проверяемое при выполнении условной конструкции. Блок команд, выполняемых при истинном условии, указывается в фигурных скобках сразу после ключевого слова if с условием (if-блок). Команды, предназначенные для выполнения в случае ложного условия, указываются в фигурных скобках после ключевого слова else (else-блок). Шаблон описания условной конструкции приведен ниже:

  if (условие) {
    // Команды - если условие истинно
  }
  else {
    // Команды - если условие ложно
}

    Принципы выполнения условной конструкции также проиллюстрированы в схеме на рисунке 1.


Рис.1. Принцип работы условной конструкции

    Если блок состоит всего из одной команды, то фигурные скобки для выделения блока можно не использовать.

    У условной конструкции есть упрошенная форма, в которой отсутствует else-блок. Если так, то конструкция выполняется следующим образом: проверяется условие, и, если оно истинно, выполняются команды в if-блоке. Если условие ложно, то ничего не происходит - выполняется команда, следующая после условной конструкции. Шаблон описания условной конструкции в упрощенной форме такой:

  if (условие) {
    // Команды - если условие истинно
}

    Как выполняется условная конструкция в упрощенной форме, иллюстрирует схема на рисунке 2.


Рис.2. Принцип работы условной конструкции в упрощенной форме

    Небольшой пример, иллюстрирующий работу условного оператора.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic;

namespace pr34_1
{
    class Program
    {
        static void Main()
        {
            // Переменная для определения типа пиктограммы:
            MessageBoxIcon icon;
            // Переменные для определения текста сообщения,
            // заголовка окна и имени пользователя: 
            string msg, title, name;
            // Считывание имени пользователя: 
            name=Interaction.InputBox(
                // Текст над полем ввода:
                "Как Вас зозут?",
                // Название окна:
                "Знакомимся");
            // Проверка введенного пользователем текста: 
            if (name=="") { 
                // Если текст не введен 
                // Пиктограмма ошибки: 
                icon=MessageBoxIcon.Error;
                // Текст сообщения:
                msg="Очень жаль, что мы не познакомились!";
                // Заголовок окна: 
                title="Знакомство не состоялось";
            }
            else { 
                // Если текст введен 
                // Информационная пиктограмма: 
                icon=MessageBoxIcon.Information;
                // Текст сообщения: 
                msg="Очень приятно, "+name+"!";
                // Заголовок окна: 
                title="Знакомство состоялось";
            }
            // Отображение сообщения (аргументы - текст 
            // сообщения, заголовок, кнопки и пиктограмма):
            MessageBox.Show(msg, title, MessageBoxButtons.OK, icon);
        }
    }
}
Архив проекта можно взять здесь.

    Программа простая: отображается окно с полем ввода, и пользователю предлагается ввести туда имя. Затем появляется новое диалоговое окно с сообщением, которое содержит введенное пользователем имя. Но это, если имя пользователь ввел. Однако пользователь в первом окне может нажать кнопку отмены или закрыть окно с помощью системной пиктограммы с крестом. Вот такая ситуация и обрабатывается с помощью условной конструкции. А именно, мы воспользуемся тем, что если пользователь закрывает окно с полем ввода без ввода текста, то соответствующий метод возвращает пустую текстовую строку. Чтобы легче было понять, как организован программный код, рассмотрим результат выполнения программы. Сначала, как указывалось, появляется окно с полем ввода, представленное на рисунке 3.


Рис.3. Диалоговое окно с полем для ввода имени пользователя

    Если мы вводим в поле ввода текст и щелкаем кнопку ОК, то следующим появляется окно с информационной пиктограммой (буква i в синем круге). Текст сообщения в окне содержит имя, введенное на предыдущем этапе. Окно имеет название Знакомство состоялось. Ситуация проиллюстрирована на рисунке 4.


Рис.4. Окно, отображаемое в случае, если пользователь ввел имя

    Но если поле для ввода текста оставить пустым или вместо кнопки ОК в окне с нолем ввода щелкнуть кнопку Отмена или системную пиктограмму (рисунок 3), то появится окно как на рисунке 5.


Рис.5. Окно, отображаемое в случае, если пользователь не ввел имя

    Окно содержит сообщение, пиктограмму ошибки (белый косой крест в красном круге) и имеет название Знакомство не состоялось. Подчеркнем, что появление такого окна - следствие выполнения программы, а не результат ошибки.

    Теперь проанализируем программный код. Есть несколько важных моментов. Один из них связан с подходом, использованным в программе: на финальной стадии отображается окно с сообщением. Для отображения этого окна необходимо определить три параметра:

Собственно, в процессе выполнения программы эти параметры определяются, и, после того как они определены, отображается окно. При определении указанных характеристик использована условная конструкция.

    В программе объявляется переменная icon, предназначенная для определения типа пиктограммы. Переменная объявлена как относящаяся к типу MessageBoxIcon. Напомним, что MessageBoxIcon - это перечисление. В этом перечислении есть константы, используемые для определения типа пиктограммы в диалоговом окне. Также мы используем три текстовые переменные msg (текст сообщения), title (заголовок окна), name (имя пользователя, которое вводится в поле ввода).

    Для отображения окна с полем ввода используем метод InputBox() класса Interaction. Результат (введенное пользователем значение) записывается в переменную name. А дальше в игру вступает условная конструкция. В ней проверяется условие name=="". Это выражение возвращает значение true, если в переменную name записана пустая текстовая строка. Эго имеет место, если пользователь нажал кнопку Отмена, закрыл окно с полем ввода щелчком по системной пиктограмме или если пользователь щелкнул кнопку ОК при пустом поле ввода. В иных случаях значение переменной name будет иным и условие в условном операторе окажется ложным (значение false).

    Если условие истинно, то командой icon=MessageBoxIcon.Error значение переменной icon определяется константой, соответствующей пиктограмме ошибки. Текст сообщения записывается в переменную msg командой msg="Очень жаль, что мы не познакомились!". Наконец, командой title="Знакомство не состоялось" задается значение, используемое впоследствии в качестве названия для второго диалогового окна. Напомним, что все эти команды выполняются, если значением переменной name является пустая текстовая строка. В противном случае команды выполняются другие. Они собраны в else-блоке. Там командами icon=MessageBoxIcon.Information, txt="Очень приятно, "+name+"!" и title="Знакомство состоялось" определяются значения (но не такие, как в if-блоке) для переменных icon, msg и title. Пиктограмма в этом случае используется информационная, а текст сообщения содержит значение, которое указал пользователь в поле ввода.

    После того как значения означенных переменных определены (а они в любом случае определяются, но происходит это по-разному в разных случаях), командой MessageBox.Show(msg, title, MessageBoxButtons. OK, icon) отображается диалоговое окно с сообщением.

    Такую же программу (нефункциональным возможностям) можно написать с использованием условной конструкции в упрощенной форме. Соответствующий программный код представлен ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic;

namespace pr34_2
{
    class Program
    {
        static void Main()
        {
            // Пиктограмма (сначала это пиктограмма ошибки):
            MessageBoxIcon icon=MessageBoxIcon.Error;
            // Текст сообщения:
            string msg="Очень жаль, что мы не познакомились!",
                // Заголовок окна: 
                title="Знакомство не состоялось",
                // Переменная для записи имени пользователя: 
                name;
            // Отображение окна с полем взода: 
            name=Interaction.InputBox(
                // Текст над полем ввода:
                "Как Вас зовут?",
                // Заголовок окна:
                "Знакомимся");
            // Условный оператор в упрощенной форме: 
            if (name!="") { 
                // Если не пустая текстовая строка 
                // Новый тип пиктограммы: 
                icon=MessageBoxIcon.Information;
                // Новый текст сообщения: 
                msg="Очень приятно, "+name+"!";
                // Новый заголовок окна: 
                title="Знакомство состоялось";
                } // Завершение условного оператора 
            // Отображение окна с сообщением:
            MessageBox.Show(msg, title, MessageBoxButtons.OK, icon);
        }
    }
}
Архив проекта можно взять здесь.

    Данная программа функционирует точно гак же, как и предыдущая. Но организация программного кода иная. Переменные icon, msg и title сразу получают такие значения, как в случае, когда пользователь отказывается вводить имя. Другими словами, априори мы исходим из того, что пользователь не введет имя в поле первого диалогового окна. Но после того, как определяется значение переменной name, выполняется проверка этого значения. Для проверки использован условная конструкция в сокращенной форме. В ней проверяется условие name!="", истинное в случае, если в переменную name записана непустая текстовая строка. Если так, то значения переменных icon, msg и title переопределяются (переменным присваиваются новые значения). Если условие name!="" ложно, то переменные icon, msg и title остаются с теми значениями, которые им были присвоены в самом начале (при объявлении).

    На следующем шаге мы рассмотрим вложенные условные конструкции.




Предыдущий шаг Содержание Следующий шаг