I objektorientert programmering refererer "pass by copy" og "pass by reference" til forskjellige måter å sende argumenter til funksjoner eller metoder. Terminologien varierer imidlertid avhengig av språket og konteksten.
Gå forbi kopi:
- Argumenter godkjent som kopier: I pass for copy opprettes en kopi av selve argumentet og sendes til funksjonen. Eventuelle endringer som gjøres på denne kopien i funksjonen påvirker ikke den opprinnelige variabelen utenfor funksjonen.
- Verdityper: Pass by copy brukes ofte med verdityper, som er datatyper som holder verdien direkte. For eksempel i C++ eller Java er int, double, boolean osv. verdityper.
Gå forbi referanse:
- Argumenter som referanser: I pass by reference sendes en referanse til det faktiske argumentet til funksjonen. Eventuelle endringer i argumentet inne i funksjonen reflekteres direkte i den opprinnelige variabelen utenfor funksjonen.
- Referansetyper: Pass by reference brukes ofte med referansetyper, som er datatyper som holder en referanse til et minnested der de faktiske dataene er lagret. For eksempel, i C++ og Java er objekter (forekomster av klasser) referansetyper.
På noen språk kan oppførselen kontrolleres eksplisitt ved å bruke nøkkelord som "pass by reference" eller "&" (for referanseparametere) og "pass by value" eller "*" (for verdiparametere).
For eksempel i C++:
``` cpp
void increment(int value) { // pass by value
verdi++; // endrer kopien
}
void incrementRef(int &value) {// pass by reference
verdi++; // endrer den opprinnelige variabelen
}
int main() {
int x =5; // verditype
inkrement(x); // x forblir 5
inkrementRef(x); // x blir 6
}
```
I Java:
``` java
public void increment(int value) { // pass by value
verdi++; // endrer kopien
}
public void incrementRef(int &value) {// pass by reference
verdi++; // endrer den opprinnelige variabelen
}
public static void main(String[] args) {
int x =5; // primitiv verditype
inkrement(x); // x forblir 5
inkrementRef(x); // x blir 6
}
```
I Python sendes argumenter alltid ved referanse. Python bruker imidlertid en referansetellingsmekanisme for å administrere objektets levetid, og du kan lage kopier som er uavhengige av det originale objektets referansetelling.
Å forstå pass by copy og pass by reference hjelper til med å administrere minnet effektivt, unngå uønskede modifikasjoner og sikre riktig oppførsel av funksjoner/metoder som opererer på argumenter.