1.3.Instrukcje
Instrukcje są poleceniami do wykonania. Przypomnijmy, że każda instrukcja kończy się średnikiem, który pełni rolę symbolu terminalnego. Instrukcje dzielą się na proste i złożone. Instrukcja prosta nie zawiera żadnych innych instrukcji; instrukcja złożona może zawierać inne instrukcje proste oraz instrukcje złożone.
Najprostsze instrukcje proste to instrukcja pusta o składni: null; oraz instrukcja przypisania. Pośród instrukcji złożonych wyróżnia się: instrukcję blokową, instrukcję if, instrukcję case, instrukcje pętli, instrukcję accept oraz instrukcję select.
1.3.1.Instrukcja przypisania
Instrukcja przypisania zastępuje bieżącą wartość zmiennej wynikiem opracowania wyrażenia. Składnia instrukcji jest następująca:
nazwa_zmiennej := wyrażenie;
Nazwana zmienna i wyrażenie po prawej stronie instrukcji przypisania muszą być tego samego typu lub wyrażenie musi być podtypem typu zmiennej. Przykłady:
x,y: Integer; x := 75; y := x - 1;
1.3.2.Instrukcje blokowe
Instrukcja blokowa zawiera sekwencję instrukcji, ewentualnie poprzedzoną przez część deklaracyjną. Składnia instrukcji blokowej ma postać:
[identyfikator:]
[declare
-- lokalne deklaracje]
begin
-- sekwencja instrukcji
end [identyfikator];
Frazy ujęte w nawiasy prostokątne są opcjonalne. Jeżeli instrukcja blokowa posiada identyfikator, to musimy go umieścić po end. Zakładając, że zmienne U i V są typu Integer, możemy zapisać następujący przykład:
swap:
declare
Temp: Integer;
begin
Temp := V; V := U; U := Temp;
end swap;
Uwaga. Wszelkie deklaracje zmiennych lokalnych są widoczne tylko w zasięgu danej instrukcji blokowej.
1.3.3.Instrukcje warunkowe
Instrukcje warunkowe (if) służą do wyboru działania w zależności od spełnienia określonego warunku logicznego. Warunkami w instrukcji if mogą być wyrażenia z operatorami relacji (=, /=, <, >, <=, >=), z operatorami logicznymi (and, not, or, xor) oraz z warunkowymi operatorami logicznymi (and then, or else). Składnia najprostszej instrukcji if ma postać:
if Warunek then
Instrukcja (-e)
end if;
Jeżeli chcemy podjąć alternatywne działania przy niespełnionym warunku, możemy zastosować instrukcję if o składni:
if Warunek then
Instrukcje_po_then
else
Instrukcje_po_else
end if;
Instrukcje if można dowolnie zagnieżdżać. Można tworzyć wielokrotnie złożone instrukcje if, wykorzystując słowo kluczowe elsif, np.
if Warunek_1 then
Instrukcje_1
elsif Warunek_2 then
Instrukcje_2
else
Instrukcje_3
----------------
{elsif Warunek_n then Instrukcje_n}
end if;
Należy przy tym pamiętać, że opcja else może wystąpić tylko jeden raz, natomiast elsif wielokrotnie.
1.3.4.Instrukcja wyboru
Jeżeli liczba alternatywnych działań w instrukcji if prowadzi do zbyt głębokich zagnieżdżeń, można zastosować instrukcję wyboru case o składni:
case W is
when Wartość_1 => sekwencja_instrukcj1_1;
when Wartość_2 => sekwencja_instrukcj1_2;;
...
when Wartość_n => sekwencja_instrukcji_n;;
[when others => Instrukcje_o;]
end case;
Dyskusja. W jest pewnym wyrażeniem o dyskretnym zbiorze wartości (np. typu Integer lub wyliczeniowego). Instrukcja wyboru działa następująco: po obliczeniu W następuje porównanie otrzymanego wyniku z każdą z wartości podanych po słowie kluczowym when; po stwierdzeniu zgodności wykonywana jest odpowiednia sekwencja instrukcji; przy braku zgodności wykonywana jest sekwencja instrukcji po others (pozostałe przypadki). Złożony symbol asocjacji '=>' pozwala kojarzyć wartości z sekwencjami instrukcji dla wszystkich przypadków, w tym i others.
♦
Ada 95 pozwala również grupować alternatywne wartości, jak pokazano w poniższym przykładzie.
With Ada.Text_IO; Use Ada.Text_IO;
procedure Case1 is
Time : Float;
Route : Character range 'A'..'z';
begin --Case1
Get(Route);
case Route is
when 'A' => Time := 3.0; Put("Very short trip.");
when 'B' | 'N' => Time := 4.0;
when 'C' .. 'D' => Time := 4.5;
when others => Put("Stay home!");
end case;
end Case1;
Uwaga 1. Symbol '|' odziela przypadki alternatywne. Złożony symbol asocjacji '=>' został tutaj wykorzystany do wywołania podprogramu; w tym przypadku parametr aktualny podprogramu ("Stay home!") został jawnie skojarzony z argumentem (parametrem) formalnym.
Uwaga 2. Ada 95 wymaga umieszczenia instrukcji dla każdego przypadku; zatem, jeżeli dla pewnego przypadku nie przewidujemy żadnego działania, musimy wtedy umieścić instrukcję pustą, np.: when 'N' => null;.
1.4.Instrukcje pętli
Najprostsza instrukcja pętli posiada następującą składnię:
loop
Sekwencja instrukcji do powtarzania
end loop;
Instrukcje pętli można poprzedzać identyfikatorem; wtedy po end loop należy umieścić identyfikator:
[identyfikator:]
loop
Sekwencja instrukcji do powtarzania
end loop [identyfikator];
♦
Pętla while posiada następującą składnię:
while Warunek
loop
Instrukcja (-e)
end loop;
Podobnie, jak dla pętli prostej, pętlę while można poprzedzić identyfikatorem.
♦
Pętlę for stosuje się w przypadku, gdy liczba powtórzeń jest a priori znana i jest podana w predykacie pętli. Składnia pętli for jest następująca:
for Parametr_Pętli in [reverse] Zakres_Iteracji loop
Sekwencja instrukcji
end loop;
Podobnie jak inne instrukcje pętli, instrukcję for można poprzedzić identyfikatorem:
[identyfikator:]
for Parametr_Pętli in [reverse] Zakres_Iteracji loop
Sekwencja instrukcji
end loop [identyfikator];
Parametr_Pętli jest zmienną lokalną niejawnie zadeklarowaną przez jej obecność w pętli. Istnieje ona tylko w zasięgu pętli, i przyjmuje typ określony przedziałem Zakres_Iteracji. Opcja reverse pozwala przebiegać pętlę for w odwrotnym kierunku przy tym samym zakresie iteracji.
1.4.1.Instrukcja exit
Niekiedy istnieje konieczność wcześniejszego zakończenia pętli, mimo że nadal jest spełniony warunek wejścia do pętli. Stosuje się wtedy instrukcję exit. Dla pętli while może ona wystąpić w zagnieżdżonej w niej instrukcji if:
while Warunek loop
if Warunek2 then exit;
end if;
end loop;
Powyższy kod można uprościć do postaci:
while Warunek loop
exit when Warunek2;
end loop;
Instrukcja exit pozwala tworzyć pętle z badaniem warunku wyjścia z pętli, wykonywane co najmniej jeden raz; składnia takiej pętli może mieć postać:
loop
Instrukcja (-e)
exit when Warunek;
end loop;
|