Скачиваний:
67
Добавлен:
24.03.2015
Размер:
169.98 Кб
Скачать

4.5. Тернарная (условная) операция

В отличие от классических арифметических и логических операций, унаследованных языками программирования из математики (арифметики и алгебры), условная операция требует трёх операндов. В выражении с условной операцией два размещённых не подряд символа '?' и ':', разделяющих (или соединяющих) три операнда:

операнд_1 ? операнд_2 : операнд_3

Операнд_1 - логическое выражение; операнд_2 и операнд_3 - выражения одного типа или выражения, котрые могут быть неявно приведены к одному типу.

При выполнении выражения с тернарной операцией первым вычисляется значение операнда_1. Если оно истинно (true), то вычисляется значение операнда_2, которое становится результатом. Если операнд_1 равен false, то вычисляется значение операнда_3, и оно становится результатом всего выражения с тернарной операцией. Классический пример:

х<0 ? –х : х

Если х - переменная арифметического типа, то результат выполнения операции - абсолютное значение х.

Ранг операции ?: очень низок, но она имеет приоритет перед операциями присваивания. Поэтому с операцией присваивания выражения с тернарной операцией можно достаточно часто использовать без скобок. Например, можно так вычислить абсолютное значение разности кодов двух символов, не обращаясь к таблице кодов:

int почта = 'f'>'z'?'f-'z':'z'-'f';

Для наглядности операнды тернарной операции и всё условное выражение желательно в ряде случаев заключать в скобки. В качестве примера рассмотрим следующее выражение с переменными арифметического типа:

res = (x<y)?((y<z)?z:y):(x<z)?z:x);

Переменная res получает наибольшее из значений переменных х, у, z. Приведённое выражение будет правильно исполняться и при отсутствии скобок:

res = x<y?y<z?z:y:x<z?z:x;

Однако для надёжности скобки лучше применить.

Тип результата тернарной операции определяется типом операндов, разделённых двоеточием. Например, если нужно выбрать из двух символов тот, который имеет большее значение кода, то можно записать такое выражение:

char ch ='g'>'e'? 'g': 'e'

Приведённые примеры и правила иллюстрирует следующая программа:

// 04_06.cs - выражения с тернарной операцией

static void Main()

{

char c = 'a', h = 'e', ch;

int norma = c > h ? c - h : h - c;

Console.WriteLine("|c-h| = " + norma);

ch = c > h ? c : h;

Console.WriteLine("ch = " + ch);

double x = 4, y = 7, z = 5, res;

res = (x < y) ? ((y < z) ? z : y) : ((x < z) ? z : x);

Console.WriteLine("res = " + res);

res = x < y ? y < z ? z : y : x < z ? z : x;

Console.WriteLine("res = " + res);

}

Результат выполнения программы:

|c-h| = 4

ch = e

res = 7

res = 7

9

Соседние файлы в папке Lekc_C#