Ada Programlama Dili — Örnekler: Metotlar
1. Greetings
Bu program çalıştırlırken argüman olarak bir isim alacak ve ekrana bu isim ile “Hello <isim>!” yazacak.
main.adb
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
procedure Greet (Name : in String) is
begin
Put_Line ("Hello " & Name & "!");
end Greet;
begin
if Argument_Count < 1 then
Put_Line ("ERROR: missing arguments! Exiting...");
return;
elsif Argument_Count > 1 then
Put_Line ("Ignoring additional arguments...");
end if;
Greet (Argument (1));
end Main;
Derleme ve Test
❯ gnatmake main.adb
gcc -c main.adb
gnatbind -x main.ali
gnatlink main.ali
❯ ./main Ada
Hello Ada!
❯ ./main "Ada"
Hello Ada!
❯ ./main ""
Hello !
❯ ./main " "
Hello !
❯ ./main
ERROR: missing arguments! Exiting...
2. Subtract Procedure
Subtract
adındaki bir metota Integer
türünden üç parametre verilecek. İlk parametreden ikincisi çıkartılacak, ve sonuç üçüncü parametreye atanacak. Programı çalıştırırken main.adb
içerisinde bulunan test isimleri verilecek.
subtract.ads
procedure Subtract (Left, Right : in Integer; Result : out Integer);
subtract.adb
procedure Subtract (Left, Right : in Integer; Result : out Integer) is
begin
Result := Left - Right;
end Subtract;
Derleme ve Test
❯ gnatmake main.adb
gcc -c main.adb
gcc -c subtract.adb
gnatbind -x main.ali
gnatlink main.ali
❯ ./main Sub_10_1_Chk
Result: 9
❯ ./main Sub_10_100_Chk
Result: -90
❯ ./main Sub_0_5_Chk
Result: -5
❯ ./main Sub_0_Minus_5_Chk
Result: 5
3. States
Kullanıcı uygulamayı çalıştırırken argüman olarak Integer
türünden bir değer verecek. Ve bu argümana bağlı olarak Display_State
metodu, aşağıda belirtilen durum bilgisini ekrana yazacak. Aksi halde ekrana herhangi bir mesaj vermeyecek.
Sayı | Durum Bilgisi
------|-------------------------
0 | Off
1 | On: Simple Processing
2 | On: Advanced Processing
display_state.ads
procedure Display_State (State : in Integer);
display_state.adb
with Ada.Text_IO; use Ada.Text_IO;
procedure Display_State (State : in Integer) is
begin
case State is
when 0 =>
Put_Line ("Off");
when 1 =>
Put_Line ("On: Simple Processing");
when 2 =>
Put_Line ("On: Advanced Processing");
when others =>
null;
end case;
end Display_State;
Derleme ve Test
❯ gnatmake main.adb
gcc -c main.adb
gcc -c display_state.adb
gnatbind -x main.ali
gnatlink main.ali
❯ ./main 0
Off
❯ ./main 1
On: Simple Processing
❯ ./main 2
On: Advanced Processing
❯ ./main 3
❯ ./main -1
❯ ./main test
raised CONSTRAINT_ERROR : bad input for 'Value: "test"
4. States #4
Bu uygulama öncelikle kullanıcıdan argüman olarak Integer
türünden bir değer alacak. Bu değer Set_Next
adındaki bir metota parametre olarak verilecek. Bu metot da parametrenin o anki değerine göre bir sonraki durumu aynı parametreye atayacak. Bu örnekteki tüm durumlar 0 ile 2 arasındadır. Şayet verilen parametrenin içeriği 2 veya bu durumların dışında ise sonraki durum 0 olacak.
set_next.ads
procedure Set_Next (State : in out Integer);
set_next.adb
procedure Set_Next (State : in out Integer) is
begin
State := (if State < 2 then Integer'Succ (State) else 0);
end Set_Next;
Derleme ve Test
❯ gnatmake main.adb
gcc -c main.adb
gcc -c set_next.adb
gnatbind -x main.ali
gnatlink main.ali
❯ ./main 0
1
❯ ./main 1
2
❯ ./main 2
0
❯ ./main 10
0
❯ ./main -1
0