function nazwa_funkcji <lista_paramertów_i_ich _typów) : typ_wyniku;
{ blok deklaracji }
begin
{ blok instrukcji } end;
Podstawową sprawą jest określenie, jakich danych (i jakiego typu) potrzebuje funkcja do działania (czyli jakie są jej parametry formalne) i jakiego typu jest wynik jej działania. Zastanówmy się nad kilkoma przykładami:
Silnia. W trakcie pisania przykładowego programu do pamiętania argumentu używaliśmy typu Byte, dla obliczanego wyniku Longint. Czemu więc nie użyć takich samych typów w funkcji? Pierwszy wiersz mógłby więc wyglądać następująco:
function Silnia (N : Byte) : Longint;
Sprawdzanie, czy liczba jest pierwsza. W programie sprawdzaną liczbę pamiętaliśmy jako Longint. Wynik oczywiście powinien być typu Boolean (przyjmowałby wartość True, jeżeli liczba jest pierwsza, i False, jeżeli nie). Oto przykładowy pierwszy wiersz definicji funkcji:
function Pierwsza (N : Longint) ; Boolean;
NWD (największy wspólny podzielnik). Ta funkcja wymaga aż dwóch liczb. Załóżmy, że będą typu Integer. Wynikiem będzie też liczba (także typu Integer).
function NWD (A, B : Integer) : Integer;
Typy parametrów definiuje się podobnie jak typy zmiennych w sekcji var bloku dekla-racyjnego. Jeżeli dwa parametry są tego samego typu, można je zadeklarować jednocześnie, oddzielając przecinkiem. Można je także zawrzeć w dwóch deklaracjach, oddzielonych średnikiem. Powyższy wiersz mógłby więc także wyglądać następująco:
function NWD (A, Integer; B: Integer) : Integer;
Usuwanie znaku z tekstu. Wyobraźmy sobie funkcję, która ma z podanego tekstu usunąć wszystkie wystąpienia jakiegoś znaku. Argumentami funkcji są znak (typu Char) i łańcuch (typu String). Wartością funkcji jest również łańcuch (typu String). Można by więc zapisać:
function UsunZnak (Znak, Char; Łańcuch: String) : String;
Bardzo ważne jest zapisanie w komentarzu, co dana funkcja robi, co oznaczają jej kolejne parametry i co jest wynikiem działania. Jeżeli ma jakieś ograniczenia, także należy to opisać. Po napisaniu i przetestowaniu taka funkcja może dla nas pełnić rolę „czarnej skrzynki”, której wnętrze nie będzie nas interesować i będziemy jej używać wielokrotnie i przez długi czas, nie tylko w jednym, ale w wielu programach. Dobra własna biblioteka różnych przydatnych funkcji i procedur jest osobistym skarbem każdego programisty.
Zauważ, że to, co występuje w dalszej części, do złudzenia przypomina strukturę programu (blok deklaracji, begin, blok instrukcji, end, tylko na końcu występuje średnik zamiast kropki).
Koniecznie musisz zawrzeć w bloku instrukcji przypisanie funkcji wartości. Jeżeli tego nie zrobisz, funkcja zwróci wartość nieokreśloną. Przypisania wartości dokonuje się za pomocą instrukcji:
nazwa_funkcji wartość