Ada Programlama Dili — Örnekler: Metotlar

mozgan
Ada Programlama Dili
3 min readJun 6, 2024
https://hmhub.in/wp-content/uploads/2018/01/flow-process-e1515418495636.jpg

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

--

--