@mj28u - procedury i funkcje stosuje się po to, aby dany kod wydzielić z jego głównego ciała, zwiększając czytelność całości, albo po to, aby jeden blok kodu móc wykorzystać w programie wiele razy i w wielu jego miejscach - stosując zasadę DRY;
Ponadto, tak jak wspomniał @Wibowit - funkcję możesz wstawić w miejsce zmiennej lub literału bezpośrednio w warunku, jeśli tylko typy się zgadzają; Zobacz na poniższy przykład, który zwraca znak do wykorzystania w kodzie:
procedure NoSolution();
begin
// ???
end;
procedure ReturnInRefParam(var AChar: AnsiChar);
begin
AChar := ReadKey();
end;
function ReturnInResult(): AnsiChar;
begin
Result := ReadKey();
end;
var
chrFoo: AnsiChar;
begin
// procedura NoSolution - brak rozwiązania, bo nijak
// nie można zwrócić klawisza
NoSolution();
// procedura ReturnInRefParam
ReturnInRefParam(chrFoo);
if chrFoo = #13 then
begin
// tutaj obsługa wciśnięcia klawisza Enter
end;
// funkcja ReturnInResult - pierwsze rozwiązanie, ze zmienną
chrFoo := ReturnInResult();
if chrFoo = #13 then
begin
// tutaj obsługa wciśnięcia klawisza Enter
// klawisz mamy zapamiętany w zmiennej, więc możemy go wykorzystać
// w dalszej części kodu, już poza tym warunkiem
end;
// funkcja ReturnInResult - drugie rozwiązanie, bez zmiennej
if ReturnInResult then
begin
// tutaj obsługa wciśnięcia klawisza Enter
end;
end;
Procedura NoSolution
nie daje możliwości zwrócenia klawisza, więc jeśli zmienna chrFoo
nie będzie dla niej widoczna - nie będzie możliwości wpisania do niej pobranego klawisza;
Procedura ReturnInRefParam
zwraca pobrany klawisz przez parametr, przekazany przez referencję; Wymaga zmiennej, do której wpisana zostanie wartość klawisza; Następnie zmienna ta wykorzystana jest w warunku sprawdzającym wartość klawisza;
Funkcja ReturnInResult
zwraca pobrany klawisz przez jej rezultat, więc nie wymaga dodatkowej zmiennej; Można ją od razu wykorzystać w warunku; Tutaj są dwa rozwiązania - można skorzystać z dodatkowej zmiennej, lub nie; Jeśli wartość klawisza ma się przydać później - musimy ją zapisać w zmiennej, aby jej nie utracić; W powyższym przykładzie użycia funkcji, wartość klawisza nie jest nam później potrzebna, więc funkcję można wywołać w warunku; Jej rezultat zostanie przekazany do warunku i sprawdzony;
Jak widzisz jest kilka różnych sposobów na rozwiązanie danego algorytmu, ale trzeba wybrać taki, który nam pasuje i zapewnia poprawność działania kodu.