Het kernverschil tussen procedures en functies ligt in hun retourwaarden:
* Procedure: Een procedure (ook wel een subroutine of subprogramma genoemd) is een codeblok dat een specifieke taak uitvoert, maar *geen waarde retourneert*. Het is in wezen een reeks instructies die worden uitgevoerd vanwege de bijwerkingen (bijvoorbeeld het wijzigen van gegevens, het afdrukken van uitvoer, interactie met hardware).
* Functie: Een functie is ook een codeblok dat een specifieke taak uitvoert, maar retourneert *altijd een waarde*. Deze retourwaarde kan van elk gegevenstype zijn (geheel getal, tekenreeks, booleaanse waarde, object, enz.) of zelfs ongeldig zijn (wat betekent dat het niets expliciet retourneert, maar in veel talen nog steeds een impliciete retour heeft). Het primaire doel van een functie is het berekenen en retourneren van een resultaat.
Hier is een analogie:
Stel je een chef-kok voor.
* Procedure: Voor het bereiden van een gerecht volgt de chef-kok een recept. De actie van het bereiden van het gerecht is de procedure. Behalve de gewijzigde ingrediënten geeft de chef je direct niets terug; het eindresultaat is een verandering in de toestand van de ingrediënten.
* Functie: De chef-kok maakt een saus. De actie van het maken van de saus is de functie, en de saus zelf is de geretourneerde waarde.
In code (Python-voorbeeld):
```python
Procedure (retourneert geen waarde)
def groet(naam):
print(f"Hallo, {naam}!")
greet("Alice") # Uitvoer:Hallo, Alice!
Functie (retourneert een waarde)
def voeg toe(x, y):
retourneer x + y
som =optellen(5, 3) # som wordt 8
print(som) # Uitvoer:8
```
Belangrijkste verschillen samengevat:
| Kenmerk | Werkwijze | Functie |
|--------------|--------------------------------------|--------------------------------------|
| Retourwaarde | Retourneert geen waarde | Retourneert altijd een waarde (kan ongeldig/Geen zijn) |
| Doel | Voert een taak uit, vaak tegen bijwerkingen | Berekent en retourneert een resultaat |
Hoewel het onderscheid in theorie duidelijk is, vervagen bij sommige programmeertalen de grenzen. Sommige talen maken bijvoorbeeld niet expliciet onderscheid tussen procedures en functies, en gebruiken de term 'functie' om beide te omvatten. Het conceptuele verschil blijft echter belangrijk voor het begrijpen van programmaontwerp en modulariteit. |