Egilhh уже рассмотрел основную причину, но иногда есть другие полезные причины для реализации выражений. Иногда вы создаете пакеты, где требуется только один или два метода, и они являются единственной причиной создания тела пакета. Вы можете использовать выражения для создания функций выражений, которые позволяют вам определять операции в файле спецификации.
Кроме того, если вы когда-нибудь столкнетесь с какими-то сложными комбинациями записей вариантов, иногда выражения можно использовать для установки значений по умолчанию для них в тех случаях, когда вы обычно не сможете сделать это так чисто. Рассмотрим следующий пример:
with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is
type Binary_Type is (On, Off);
type Inner(Binary : Binary_Type := Off) is record
case Binary is
when On =>
Value : Integer := 0;
when Off =>
null;
end case;
end record;
type Outer(Some_Flag : Boolean) is record
Other : Integer := 32;
Thing : Inner := (if Some_Flag then
(Binary => Off)
else
(Binary => On, Value => 23));
end record;
begin
Put_Line("Hello, world!");
end Hello;
У меня было что-то, что придумало более сложную настройку, предназначенную для сопоставления со сложным интерфейсом обмена сообщениями на аппаратном уровне. Приятно иметь значения по умолчанию, когда это возможно. Теперь я использовал случай внутри Outer, но тогда мне пришлось бы придумать две отдельно названные версии поля сообщения для каждого случая, что на самом деле не оптимально, если вы хотите, чтобы ваш код отображался в ICD. Опять же, я мог бы использовать функцию для ее инициализации, но, как отмечалось в ответе других авторов, это не всегда хороший путь.