- Оператор if
- Работа
Оператор if
Условный оператор if позволяет выполнить группу операторов лишь в случае, если какое-то логическое выражение имеет значение ИСТИНА. Дополнительно может быть определена группа операторов, выполняемых в случае, если заданное выражение имеет значение ЛОЖЬ.
Оператор if может быть описан по одному из следующих шаблонов:
1. if (<проверка>) <оператор1>;
2. if (<проверка>) <оператор1>; else <оператор2>;
3. if (<проверка>) { <список операторов1 ;>}
4. if (<проверка>) { <список операторов1 ;>} else {список операторов2 ;}
Здесь проверка - это логическое выражение, проверяемое на истинность, оператор1 - оператор, выполняемый только в случае истинности проверки, оператор2 выполняется только в случае ложности проверки. Под списком операторов подразумевается любая последовательность любых операторов, причем, как и одиночные, эти списки выполняются лишь в соответствующем случае в зависимости от результата проверки.
Обратите внимание, что для 3 и 4 форм оператора if наличие завершающей оператор точки с запятой не является необходимым. В данном случае закрывающая фигурная скобка однозначно свидетельствует о завершении оператора, в то время как в списках каждый из операторов должен завершаться точкой с запятой (если, конечно, оператор в списке не ограничивается фигурными скобками).
Шаблоны оператора if не накладывают никаких ограничений на то, какие операторы могут быть на месте оператра1 или опера-тора2 или же в соответствующих списках. Это означает, что среди них так же может использоваться оператор if. В этом случае может возникнуть проблема с определением принадлежности части оператора else:
if (а < 2) if (с > 5) result = 5; else result = 0;
В этом примере стоит задуматься, к какому из операторов if относится часть else? Язык Си однозначно вводит следующее правило: всякий else относится к ближайшему предыдущему if, не имеющему своего else. Таким образом, в вышеприведенном примере else относится к оператору if(c > 5).
Очевидно, что запись оператора в одну строку не способствует улучшению восприятия программы. Благодаря тому, что язык Си допускает использование любых «пробельных» разделителей, гораздо более удачной следует считать следующую форму записи:
if (a < 2)
if (c > 5)
result = 5;
else
result = 0;
Благодаря использованию табуляций вышеприведенный пример даже визуально показывает принадлежность else соответствующему оператору if.
Следует отметить, что пример показывает одну из проблем, характерную для оператора if - так называемую неполную проверку вариантов. Она заключается в следующем: если, например, переменная а равна 5, то переменная result оказывается с неопределенным значением. Возможно, она получит (или получила) нужное значение в другом операторе, возможно переменная а никогда не получит значение больше 1 (но тогда, к чему вообще проверка?!), однако если это не так - проблем не миновать.
Итак, при использовании оператора if желательно не допускать двусмысленностей его поведения при различных результатах проверяемых выражений. Так же не лишним будет использование фигурных скобок для определения границ списка операторов, даже если фактически используется единственный оператор.