Bij objectgeoriënteerd programmeren verwijzen "pass by copy" en "pass by reference" naar verschillende manieren om argumenten door te geven aan functies of methoden. De terminologie varieert echter afhankelijk van de taal en de context.
Geef kopie door:
- Argumenten doorgegeven als kopieën: Bij het kopiëren wordt er een kopie van het daadwerkelijke argument gemaakt en doorgegeven aan de functie. Elke wijziging die binnen de functie aan deze kopie wordt aangebracht, heeft geen invloed op de oorspronkelijke variabele buiten de functie.
- Waardetypen: Pass-by-copy wordt vaak gebruikt bij waardetypen, dit zijn gegevenstypen die hun waarde direct behouden. In C++ of Java zijn int, double, boolean, etc. bijvoorbeeld waardetypen.
Geef referentie door:
- Argumenten als referenties: Bij verwijzing wordt een verwijzing naar het feitelijke argument doorgegeven aan de functie. Alle wijzigingen die in het argument binnen de functie worden aangebracht, worden direct weerspiegeld in de oorspronkelijke variabele buiten de functie.
- Referentietypen: Pass by reference wordt vaak gebruikt bij referentietypen. Dit zijn gegevenstypen die een verwijzing bevatten naar een geheugenlocatie waar de daadwerkelijke gegevens zijn opgeslagen. In C++ en Java zijn objecten (instances van klassen) bijvoorbeeld referentietypen.
In sommige talen kan het gedrag expliciet worden beheerd met behulp van trefwoorden zoals "pass by reference" of "&" (voor referentieparameters) en "pass by value" of "*" (voor waardeparameters).
In C++ bijvoorbeeld:
```cpp
void increment(int value) {// geef waarde door
waarde++; // wijzigt de kopie
}
void incrementRef(int &value) {//door referentie doorgeven
waarde++; // wijzigt de originele variabele
}
int hoofd() {
intx =5; // waardetype
verhoging(x); // x blijft 5
verhogingRef(x); // x wordt 6
}
```
Op Java:
```java
public void increment (int value) {// pass by value
waarde++; // wijzigt de kopie
}
public void incrementRef(int &value) {//door referentie doorgegeven
waarde++; // wijzigt de originele variabele
}
public static void main(String[] args) {
intx =5; // primitief waardetype
verhoging(x); // x blijft 5
verhogingRef(x); // x wordt 6
}
```
In Python worden argumenten altijd doorgegeven door middel van verwijzing. Python gebruikt echter een mechanisme voor het tellen van referenties om de levensduur van het object te beheren, en u kunt kopieën maken die onafhankelijk zijn van de referentietelling van het oorspronkelijke object.
Het begrijpen van pass-by-copy en pass-by-referentie helpt bij het efficiënt beheren van het geheugen, het vermijden van ongewenste wijzigingen en het garanderen van correct gedrag van functies/methoden die op argumenten werken. |