Как показано в диаграмме примера на странице 63 вашей первой ссылки, условие оператора if
является выражением EXPRESSION, а каждое из предложений then
и else
является "EXEC-STATEMENT-CONTENTS".(Я не смог найти определение этого класса, но я предполагаю, что он описывает последовательность операторов.) Семантика, специфичная для оператора if
, инкапсулирована тем фактом, что эти стандартные объекты являются конкретными атрибутами оператора if
;они не должны быть разными классами.
Если это кажется запутанным, рассмотрим простой класс Pixel:
struct Pixel {
int x;
int y;
};
Обратите внимание, что нет необходимости (или даже желательно) придумывать конкретныеклассы для "целых чисел, которые являются X-координатами" и "целых чисел, которые являются Y-координатами".Оба являются просто целыми числами, а определенная семантика является особенностью самого класса Pixel.
Таким же образом, предложения then
и предложения else
являются просто списками операторов.
На самом деле, в Java они являются отдельными утверждениями, хотя это не так для каждого языка.Например, в Python они представляют собой последовательность операторов, но не область действия, в то время как в Lua это обычный блок (который является областью действия).Во многих языках, включая Java, предложение else
является необязательным (в отличие от диаграммы, на которую я ссылался, которая, как представляется, настаивает на том, что она есть).