@mj28u - procedura nie zwraca wartości, więc możesz ją stosować wszędzie tam, gdzie nie potrzebujesz sprawdzić jak poszło jej wywołanie; Przykładem jest procedura ClrScr - wywołujesz ją żeby wyczyścić ekran konsoli, ale nie potrzebujesz żadnych od niej informacji; Ona ma się wykonać i tyle;
Funkcje natomiast zwracają jakąś wartość, więc możesz ich używać wszędzie tam, gdzie potrzebujesz otrzymać od niej jakieś informacje; Zwracana przez funkcję informacja będzie wykorzystywana na zewnątrz ciała funkcji; Najczęstrzym błędem jest korzystanie jedynie z procedur zamiast funkcji, a zwracanie wyniku zastępowane jest stertą zmiennych globalnych; To jest zła praktyka, którą powinno się wybijać wszystkim z głów;
Przykładem funkcji jest KeyPressed - sprawdza ona, czy w buforze inputu znajduje się klawisz; Jeśli użytkownik wcisnął klawisz - zwraca True, w przeciwnym razie False; Czyli funkcja zwraca informację o tym, czy użytkownik coś wcisnął; Zwróconą informację możesz wykorzystać do konstrukcji dalszej części kodu; Jeśli klawisz został wciśnięty - obsługujemy go, a jeśli nie - robimy coś innego; Gdyby KeyPressed nie zwracała wyniku - nie wiedzielibyśmy nic o stanie bufora wejściowego i w rezultacie taka procedura była by bezużyteczna;
Funkcje nie są jedynymi blokami kodu, które mogą coś zwrócić na zewnątrz; Procedury także mogą pełnić funkcję funkcji, poprzez przyjmowanie parametrów przez referencję lub jako wskaźniki; Pomimo tego, że taka procedura nie będzie mogła zwrócić wartości przez rezultat, tak jak ma to miejsce w funkcjach, to modyfikacja wartości parametrów wpłynie na dane na zewnątrz niej;
Procedury przyjmujące parametry przez referencję przydają się w przypadku, gdy jedna procedura ma zmienić wartości kilku zmiennych, znajdujących się poza jej ciałem; Nie można by wtedy użyć funkcji, bo funkcje mogą zwrócić tylko jedną informację; Jeśli funkcja miałaby zwrócić kilka róznych wartości - musiałaby zwrócić np. rekord z kilkoma polami; Zastępując ją procedurą - wystarczy podać te kilka zmiennych w parametrach przez referencję, a wewnątrz niej tylko zmodyfikować ich wartości;
Procedury i funkcje wykorzystuje się w zależności od danej sytuacji - nie mają one dokładnego i ściśle zdefiniowanego przeznaczenia; To dość obszerny temat, więc zapoznaj się przede wszsytkim z budową ich ciał, a także ze sposobami przekazywania parametrów (jest ich cztery); Jeśli poznasz wszystkie aspekty związane z nimi, to sam będziesz wiedział gdzie czego używać.