I objektorienteret programmering henviser "pass by copy" og "pass by reference" til forskellige måder at videregive argumenter til funktioner eller metoder. Terminologien varierer dog afhængigt af sproget og konteksten.
Gå forbi kopi:
- Argumenter godkendt som kopier: I gang for kopi oprettes en kopi af det faktiske argument og sendes til funktionen. Enhver ændring af denne kopi i funktionen påvirker ikke den originale variabel uden for funktionen.
- Værdityper: Pass by copy bruges almindeligvis med værdityper, som er datatyper, der har deres værdi direkte. For eksempel i C++ eller Java er int, double, boolean osv. værdityper.
Gå forbi reference:
- Argumenter som referencer: I pass by reference sendes en reference til det faktiske argument til funktionen. Eventuelle ændringer i argumentet inde i funktionen afspejles direkte i den oprindelige variabel uden for funktionen.
- Referencetyper: Pass by reference bruges ofte med referencetyper, som er datatyper, der holder en reference til en hukommelsesplacering, hvor de faktiske data er gemt. For eksempel i C++ og Java er objekter (forekomster af klasser) referencetyper.
På nogle sprog kan adfærden styres eksplicit ved hjælp af nøgleord som "pass by reference" eller "&" (for referenceparametre) og "pass by value" eller "*" (for værdiparametre).
For eksempel i C++:
``` cpp
void increment(int value) { // pass by value
værdi++; // ændrer kopien
}
void incrementRef(int &value) {// pass by reference
værdi++; // ændrer den oprindelige variabel
}
int main() {
int x =5; // værditype
stigning(x); // x forbliver 5
stigningRef(x); // x bliver 6
}
```
I Java:
``` java
public void increment(int value) {// pass by value
værdi++; // ændrer kopien
}
public void incrementRef(int &value) {// pass by reference
værdi++; // ændrer den oprindelige variabel
}
public static void main(String[] args) {
int x =5; // primitiv værdi type
stigning(x); // x forbliver 5
stigningRef(x); // x bliver 6
}
```
I Python sendes argumenter altid ved reference. Python bruger dog en referencetællingsmekanisme til at styre objektets levetid, og du kan oprette kopier, der er uafhængige af det originale objekts referencetælling.
At forstå pass by copy og pass by reference hjælper med at administrere hukommelsen effektivt, undgå uønskede ændringer og sikre korrekt opførsel af funktioner/metoder, der fungerer på argumenter.