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.
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
