Autor: 15.03.2024
Czym się różni funkcja od procedury?
Funkcja i procedura to dwa ważne pojęcia w programowaniu. Niektórzy używają ich zamiennie, choć w rzeczywistości są pomiędzy nimi istotne różnice. Mamy nadzieję, że po przeczytaniu tego artykułu, zrozumiesz na czym te różnice polegają.
Zwracanie wartości
Funkcja zwykle zwraca wartość, która może być używana w dalszych obliczeniach lub operacjach. Z kolei procedura nie zwraca wartości, może jedynie wykonywać operacje, manipulować danymi itp.
Argumenty
Funkcja może przyjmować argumenty (parametry), które są przekazywane do funkcji w celu wykonania operacji na nich i zwrócenia wyniku. Procedura także może przyjmować argumenty, ale ich przekazanie ma na celu jedynie manipulację nimi w obrębie procedury, niekoniecznie zwracanie jakiejkolwiek wartości.
Czystość funkcji
Czysta funkcja nie wpływa na stan zmiennych poza swoim zakresem, a wynik zależy tylko od jej argumentów. Oznacza to, że funkcja nie ma żadnych efektów ubocznych. Procedura może zmieniać stan zmiennych poza swoim zakresem lub mieć inne efekty uboczne.
Przykłady
Najlepiej będzie zilustrować te różnice za pomocą prostego przykładu.
Funkcja
Funkcja obliczająca silnie, funkcja obliczająca odległość między dwoma punktami itp.
Procedura
Procedura sortująca listę, procedura przeliczająca kwoty walutowe itp..
Funkcje, procedury i języki programowania
Większość popularnych języków programowania, takich jak Python, C++, Java, umożliwia stosowanie zarówno funkcji jak i procedur. Z technicznego punktu widzenia często nie ma pomiędzy nimi żadnych różnic - stosowane są te same mechanizmy języka.
Realne różnice polegają na stosowaniu odpowiednich konwencji i podejścia do pisania kodu. Na przykład w Pythonie, można użyć słowa kluczowego def do zdefiniowania bloku kodu, który może być zarówno procedurą jak i funkcją. Jeśli nasza funkcja nie będzie zwracała wartości, to będzie koncepcyjnie zbliżona raczej do procedury niż typowej funkcji. W nowoczesnym funkcyjnym podejściu do kodu zdecydowanie częściej stosuje się funkcje zwracające wartość (funkcje czyste). Sama koncepcja procedury jest uznawana za przestarzałą bo utrudnia zrozumienie i wielokrotne wykorzystanie kodu.