Object Pascal/Procedury i funkcje
Z Wikibooks, biblioteki wolnych podręczników.
Spis treści |
[edytuj] Do czego służą procedury i funkcje?
Procedury służą do zamknięcia pewnych standardowych, wielokrotnie wykonywanych ciągów czynności w pewną całość "widzianą" przez program pod konkretną nazwą i operującą w danej chwili na konkretnych argumentach. Funkcja jest podobna do procedury, różni się od niej tym, że pod swoją nazwą zwraca pewną wartość. Zastosowanie procedur i funkcji pozwala na optymalizację wykorzystania pamięci. Pamięć jest przydzielana dynamicznie podczas wywołania.
[edytuj] Procedury
[edytuj] Deklaracja procedury
procedure nazwa [(lista_parametrów_formalnych)];
{deklaracje lokalnych stałych, zmiennych i typów}
begin
{część operacyjna}
end;
Deklaracja procedury powinna znajdować się przed częścią operacyjną programu, czyli przed głównym słowem begin,a po deklaracji zmiennych, z których ona korzysta. Nie jest konieczne umieszczanie po deklaracji zmiennych, ale stosowanie się do tej zasady pozwala na zastosowanie porządku w zapisie programu.
Jeżeli chcemy aby procedura była zadeklarowana za miejscem jej pierwszego wywołania, należy użyć słowa kluczowego forward:
procedure nazwa [(lista-parametrów-formalnych)]; forward;
Wewnątrz procedury można deklarować zmienne lokalne, czyli zmienne wewnętrzne, obowiązujące tylko w tej procedurze, w której zostały zadeklarowane. Zmienne lokalne mogą mieć takie same identyfikatory jak zmienne globalne (zmienne zewnętrzne, obowiązujące w całym programie), wtedy znaczenie zmiennej globalnej zostanie przysłonięte znaczeniem zmiennej lokalnej. Wewnątrz deklaracji można używać zmiennych globalnych (nie przysłaniając ich), pokazane na przykładzie, jednak należy pamiętać o częstych błędach przy drobnej nieuwadze.
[edytuj] Przykład deklaracji
procedure srednia;
var
i:integer;
s:real;
begin
s:=0.0;
for i:=1 to ilosc do //ilosc - zmienna zewnętrzna
s:=s+dane[i];
wynik:=s/ilosc
end;
[edytuj] Wywołanie procedury
nazwa_procedury [(lista_parametrów_aktualnych)];
Wywołanie procedury polega na podaniu w zapisie programu jej nazwy, a także listy parametrów aktualnych, czyli zawierających ich bieżące wartości. Lista ta nie istnieje, gdy nie określimy żadnych parametrów formalnych przy deklarowaniu procedury.
[edytuj] Podstawowe procedury
[edytuj] Procedury przerywające wykonanie instrukcji iteracyjnych
[edytuj] BREAK
Procedura powoduje natychmiastowe zakończenie wykonywania pętli, wewnątrz której jest wywołana.
Przykład:
var
w,x,i,j:integer;
begin
w:=1
for i:=3 to 3 do
for j:=1 to 8 do
begin
readln(x);
if x=0 then break
else w:=w*x
end;
writeln('iloczyn=',w);
end.
[edytuj] CONTINUE
Procedura powoduje natychmiastowe przejście do kolejnej iteracji pętli, wewnątrz której jest wywołana.
Przykład:
var
w,x,i,j:integer;
begin
w:=1
for i:=1 to 3 do
for j:=3 to 5 do
begin
readln(x);
if x=0 then continue
else w:=w*x
end;
writeln('iloczyn=',w);
end.
[edytuj] Procedury powodujące przerwanie wykonywanego programu
[edytuj] EXIT
Procedura Exit wywołana wewnątrz procedury lub funkcji powoduje jej przerwanie i powrót do miejsca wywołania, a wywołana w części wykonawczej programu powoduje jego zakończenie.
[edytuj] HALT
Procedura Halt, której wywołanie ma postać:
Halt (kod_wyjścia);
lub
Halt
co jest równoważne wywołaniu Halt(0) (0 – zakończenie bez błędu, kod_wyjścia jest wyrażeniem typu integer) powoduje przerwanie programu i powrót do systemu.
[edytuj] RUNERROR
Procedura RunError lub RunError_(kod_błędu) powoduje przerwanie programu i wygenerowanie błędu jego wykonania o podanym kodzie (kod_błędu jest argumentem typu Byte, gdy brak tego argumentu, to przyjmuje się wartość 0).
[edytuj] Funkcje
Funkcja jest rodzajem procedury, która po wywołaniu zwraca obliczoną przez siebie wartość pod swoją nazwą.
[edytuj] Deklaracja funkcji
function nazwa [(lista-parametrów-formalnych)] : typ_wyniku;
{deklaracje lokalnych stałych, zmiennych i typów}
begin
{część operacyjna}
end;
Deklaracja funkcji powinna znajdować się przed częścią operacyjną programu, czyli przed głównym słowem begin,a po deklaracji zmiennych, z których ona korzysta. Nie jest konieczne umieszczanie po deklaracji zmiennych, ale stosowanie się do tej zasady pozwala na zastosowanie porządku w zapisie programu.
Jeżeli chcemy aby funkcja była zadeklarowana za miejscem jej pierwszego wywołania, należy użyć słowa kluczowego forward:
function nazwa [(lista-parametrów-formalnych)]:typ_wyniku; forward;
Wewnątrz funkcji można deklarować zmienne lokalne tak samo jak to jest przy procedurach.
W części operacyjnej funkcji przynajmniej raz powinna wystąpić instrukcja przypisania postaci:
nazwa:=wyrażenie;
lub
RESULT:=wyrażenie;
[edytuj] Przykład deklaracji
function srednia: integer;
var
i:integer;
s:real;
begin
s:=0.0;
for i:=1 to ilosc do //ilosc - zmienna zewnętrzna
s:=s+dane[i];
srednia:=s/ilosc
end;
[edytuj] Wywołanie funkcji
Wywołanie funkcji ma miejsce w wyrażeniu po prawej stronie instrukcji przypisania lub w instrukcji wywołania procedury:
zmienna:=nazwa [(lista-parametrów-aktualnych)];
[edytuj] Przykład wywołania
Srednia_ocen:=srednia; writeln(Srednia_ocen);
[edytuj] Pozostałe informacje
[edytuj] Procedury i funkcje działające na argumentach typu porządkowego
- Dec(x), Dec(x,n) - bezpośrednio poprzedni, dekrementacja zmiennej x
- Inc(x), Inc(x,n) - bezpośrednio następny, inkrementacja zmiennej x,
- Odd(x) - badanie parzystości, przyjmuje wartość TRUE, gdy x nieparzyste
- Pred(x) - poprzednik elementu x
- Succ(x) - następnik elementu x
[edytuj] Przeciążanie procedur i funkcji
Przeciążanie procedur i funkcji występuje wtedy, gdy:
- dwie procedury lub funkcje mogą mieć ten sam identyfikator
- musi być użyta dyrektywa języka overload
- listy parametrów formalnych muszą się różnić ilością lub typem
[edytuj] Przykłady:
Program iloczyny; var a,b:real function iloczyn (a,b: integer): integer;overload; begin result:=a*b; end; function iloczyn (a,b:real): real;overload; begin result:=a*b; end; begin c:=iloczyn(5,6) //zostanie wywołana pierwsza funkcja c:=iloczyn(5,5.6) //zostanie wywołana druga funkcja. end.
[edytuj] Rekurencja
Rekurencja jest to zdolność procedury lub funkcji do wywoływania samej siebie.