Procedury funkcje i moduły
Zapewne pamiętasz zmienne (rozdział 3). Wykorzystywaliśmy je by nie podawać w paru miejscach tych samych wartości, tekestów itp. Często zachodzi potrzeba wykonania danej czynności w kilku miejscach naszego programu (pętla, rysowanie itp.). Przydałoby się nam coś podobnego do zmiennej. Do tego służą procedury, funkcje i moduły. Stworzymy prostą procedurę by zrozumieć na czym polega jej działanie:

procedure Rysuj(x1, y1, x2, y2: Integer; kolor: TColor);
begin
Form1.Canvas.Brush.Color:=kolor;
Form1.Canvas.Rectangle(x1, y1, x2, y2);
end;

powyższa procedura rysuje kwadrat o podanym kolorze i w określonym obszarze. Aby wykorzystać procedurę Rysuj potrzebny nam będzie przycisk. Wstaw go na formę i w zdarzeniu OnClick wpisz:

rysuj(10, 10, 50, 50, clGreen);

Uruchom program i kliknij na przycisku. Zapewne zauważyłeś, że na formie został narysowany zielony kwadrat. Spytasz: "I po to są procedury". To jest tylko przykład. Rozpatrzmy taki przypadek: narysuj 100 kwadratów o różnych kolorach i w różnych miejscach. Kod procedury Rysuj zajmuje 2 linijki, a jej wykonanie tylko 1. A co gdyby procedura miała wykonać operacje mieszczące się w 100 linjikach kodu? Jak widać rozbudowany kod możemy sprowadzić do jednej linijki i wykorzystywać go w kazdym miejscu programu.

Podobne do procedur są funkcje. Różnią się tym że deklarujemy jej wynik, tzn. czy ma to być tekst, liczba itp. Najlepiej coś wyjaśnić na przykładzie:

function CzyZero(l1, l2: integer) : string;
begin
if l1-l2=0 then Result:='Wynikiem jest zero' else
Result:='Wynikiem nie jest zero';
end;

Teraz wstaw na formę Button i dwa Labele. Pod zdarzenie OnClick przycisku wpisz:
Label1.Caption := CzyZero(10,234);
Label2.Caption := CzyZero(10,10);

Jak widać nasza funkcja działa poprawnie. Zwraca ona wyniku odejmowania tylko odpowiedni tekst. Wynik wykonania funkcji podajemy po słowie Result:=. Teraz zajmiemy się modułem. Jest to plik, który zawiera procedury i funkcje. Stworzymy moduł, który zawiera powyższe przykłady. Zamknij wszystkie projekty i utwórz nowy unit (File -> New -> Unit).

Skasuj jego zawartość, wklej poniższy kod i przyjżyj się mu:

unit test;

interface

{ informujemy moduł, że korzysta on z grafiki }
uses Graphics;

{ informujem moduł jakie zawiera funkcje i procedury }
function CzyZero(l1, l2: integer) : string;
procedure Rysuj(can: TCanvas; x1, y1, x2, y2: Integer; kolor: TColor);

implementation

{ nasza funkcja}
function CzyZero(l1, l2: integer) : string;
begin
if l1-l2=0 then Result:='Wynikiem jest zero' else
Result:='Wynikiem nie jest zero';
end;

{ nasza procedura. Została lekko zmieniona (can: TCanvas). Jako że nie mamy formy, musimy poinformować procedurę na czym ma rysować kwadrat. O Canvasie można poczytać w rozdziale 14}
procedure Rysuj(can: TCanvas; x1, y1, x2, y2: Integer; kolor: TColor);
begin
can.Brush.Color:=kolor;
can.Rectangle(x1, y1, x2, y2);
end;

end.

Zapisz go do jakiegoś katalogu (np c: est) jako "test". Teraz utwórz nową aplikację (File -> New -> Application) i zapisz ją do tego samego folderu . Na formę wstaw Button i Label. Do deklaracji "uses" programu dodaj test. Teraz w zdarzeniu OnClick przycisku wpisz:

rysuj(Form1.Canvas, 10, 10, 50, 50, clMaroon);
Label1.Caption := CzyZero(100, 50);

Jeżeli wwszystko wykonałeś prawidłowo to ujżysz taki sam efekt jak przy wykonaniu procedury Rysuj i funkcji CzyZero w podanych wcześniej przykładach. Jeżeli mamy wiele funkcji i procedur, z których korzystamy w naszym programie możemy utworzyć moduł. Po co? Zauważ, że kod programu staje się bardziej przejrzysty i estetyczny.



Autorem tekstu jest: Piniol
Materiał dodany przez użytkownika: alphan