6.2. ТАБЛИЧНОЕ ЗАДАНИЕ
285
6.2.3. Условные выражения
В языках
Algol-60
,
Алгол-68
,
C
и
Java
имеется очень удобная конструкция:
условные выражения. Условное выражение языка
C
имеет вид
(P?A:B)
где
A
— выражение, значение которого вычисляется в случае истинности
P
,
B
— в случае его ложности. Во всех других языках семантика условных вы-
ражений такая же.
Заметим, что в
Алголе-68
практически все операторы выдают значение
и могут использоваться в качестве составных частей выражений. Например,
допустимо выражение
i + if P then j+ := 1; F (j) else abs(k := bad; z := k) fi.
В выражениях этого языка могут стоять даже разборы случаев типа case.
Дополнительной семантической функцией разделителя последовательно вы-
полняемых операторов “
;
” является забывание значения предшествующего
оператора.
Языки,в которых все операторы (а иногда и описания) вырабатывают зна-
чение, называются языками с концепцией значения. Такие языки хорошо со-
гласуются с некоторыми архитектурами компьютеров, в частности, со сте-
ковой архитектурой систем
Barroughs
и
Эльбрус
, где вырабатываемые зна-
чения помещаются в стек, вершиной которого служит последнее из получен-
ных значений, а также со старыми архитектурами, где был регистр (сумматор),
в котором всегда сохранялся результат предыдущей команды. Логически кон-
цепция значения соответствует взгляду на программу как на функцию, вычи-
сляющую результат по исходным данным. Концепция значения великолепно
сочетается со структурным программированием. Но ее отсутствие в языках
Pascal
и
C/C++
вполне естественно. Причина этого — в типах данных.
Современное программирование немыслимо без определения новых ти-
пов и сложных структур данных. Соответственно, если рассматривать все
выражения как вырабатывающие значения, нужно было бы строго опреде-
лить приведение данных: систему неявных преобразований данных предо-
ставленного типа в данные типа, требуемого по контексту.
6
А соединение
6
В принципе это означает, что мы должны были бы определить для каждого вида контекста,
возникающего в программе, категорию (в смысле алгебры) всех имеющихся типов данных.