I programmeringsspråk kan funksjoner påberopes på to måter: som kalles Call by Value og Call by Reference.
I denne veiledningen vil du lære,
- Hva er call by value-metoden?
- Hva er Call by Reference-metoden?
- Eksempel på en samtale etter verdimetode
- Eksempel på en samtale med referansemetode
- Ring etter verdi vs. Ring etter referanse
- Fordeler med å bruke Call by value-metoden
- Fordeler med å bruke Call by referansemetode
- Ulemper ved å bruke Call by value-metoden
- Ulemper ved å bruke Call by referansemetode
Hva er Call by Value-metoden?
Call by value-metoden kopierer verdien av et argument til den formelle parameteren for den funksjonen. Derfor påvirker ikke endringer som er gjort i parameteren til hovedfunksjonen argumentet.
I denne parameteroverføringsmetoden kopieres verdiene til faktiske parametere til funksjonens formelle parametere, og parametrene lagres på forskjellige minneplasser. Så eventuelle endringer som gjøres inne i funksjoner, reflekteres ikke i de faktiske parametrene til den som ringer.
HOVEDFORSKJELL
- I metoden Ring etter verdi blir den opprinnelige verdien ikke endret, mens den opprinnelige verdien i Call by reference-metoden blir endret.
- I Call by value sendes en kopi av variabelen, mens i Call by reference sendes en variabel i seg selv.
- I Call by value vil faktiske og formelle argumenter opprettes på forskjellige minnesteder, mens det i Call by reference blir opprettet faktiske og formelle argumenter på samme minneplassering.
- Call by value er standardmetoden i programmeringsspråk som C ++, PHP, Visual Basic NET og C # mens Call by reference bare støttes Java-språk.
- Kall etter verdi, variabler sendes ved hjelp av en grei metode, mens pekere kreves for å lagre adressen til variabler.
Hva er Call by Reference-metoden?
Ring ved referansemetode kopierer adressen til et argument til den formelle parameteren. I denne metoden brukes adressen til å få tilgang til det faktiske argumentet som brukes i funksjonsanropet. Det betyr at endringer som er gjort i parameteren endrer passeringsargumentet.
I denne metoden er minnetildelingen den samme som de faktiske parametrene. All operasjonen i funksjonen utføres på verdien som er lagret på adressen til den faktiske parameteren, og den endrede verdien vil bli lagret på samme adresse.
Eksempel på en Call by Value-metode
void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}
Produksjon:
before function calling 10value is 11after function calling 1-0
Fordi variabel erklært 'a'in main () er forskjellig fra variabel' x 'i trinn (). I dette programmet er bare variabelnavn like, men minneadressen er forskjellig og lagres på forskjellige minneplasser.
Eksempel på en samtale etter referansemetode
Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}
Produksjon:
Before call Value of a =10After call Value of a =11
Fordi variabel erklært 'a' i refererer til / peker på variabel 'a' i hoved (). Her er variabelnavnet annerledes, men begge peker / refererer til samme minneadresseplasseringer.
Ring etter verdi vs. Ring etter referanse
Parametere | Ring etter verdi | Ring ved referanse |
---|---|---|
Definisjon | Når du ringer til en funksjon, når du sender verdier ved å kopiere variabler, er den kjent som "Ring etter verdier." | Mens du ringer til en funksjon, i programmeringsspråk i stedet for å kopiere verdiene til variabler, brukes adressen til variablene, den kalles "Call By References". |
Argumenter | I denne metoden sendes en kopi av variabelen. | I denne metoden overføres en variabel i seg selv. |
Effekt | Endringer som er gjort i en kopi av variabelen endrer aldri verdien av variabelen utenfor funksjonen. | Endring i variabelen påvirker også verdien av variabelen utenfor funksjonen. |
Endring av verdi | Tillater ikke at du gjør noen endringer i de faktiske variablene. | Lar deg gjøre endringer i verdiene til variabler ved å bruke funksjonsanrop. |
Passering av variabel | Verdier av variabler sendes ved hjelp av en enkel metode. | Pekervariabler kreves for å lagre adressen til variablene. |
Verdimodifisering | Opprinnelig verdi ikke endret. | Den opprinnelige verdien er endret. |
Minneplassering | Faktiske og formelle argumenter vil bli opprettet på et annet minneplass | Faktiske og formelle argumenter vil bli opprettet på samme minneplassering |
Sikkerhet | Faktiske argumenter forblir trygge da de ikke kan endres ved et uhell. | Faktiske argumenter er ikke trygge. De kan modifiseres ved et uhell, så du må håndtere argumentoperasjoner nøye. |
Misligholde | Standard på mange programmeringsspråk som C ++. PHP. Visual Basic NET og C #. | Den støttes av de fleste programmeringsspråk som JAVA, men ikke som standard. |
Fordeler med å bruke Call by value-metoden
Fordeler / fordeler med en samtale etter verdimetode:
- Metoden endrer ikke den opprinnelige variabelen, så den bevarer data.
- Når en funksjon kalles det, må du aldri påvirke det faktiske innholdet i de faktiske argumentene.
- Verdien av faktiske argumenter overført til de formelle argumentene, så eventuelle endringer i det formelle argumentet påvirker ikke de virkelige sakene.
Fordeler med å bruke Call by referansemetode
Fordeler med å bruke samtale etter referansemetode:
- Funksjonen kan endre verdien av argumentet, noe som er ganske nyttig.
- Det lager ikke dupliserte data for bare å ha en verdi som hjelper deg med å spare minne.
- I denne metoden er det ingen kopi av argumentet. Derfor behandles det veldig raskt.
- Hjelper deg med å unngå endringer utført ved en feiltakelse
- En person som leser koden vet aldri at verdien kan endres i funksjonen.
Ulemper ved å bruke Call by value-metoden
Her er de største ulempene / ulempene ved en samtale etter verdimetoden:
- Endringer i faktiske parametere kan også endre korresponderende argumentvariabler
- I denne metoden må argumenter være variabler.
- Du kan ikke endre en variabel direkte i en funksjonsdel.
- En eller annen argumentasjon kan være komplekse uttrykk
- Det er to eksemplarer opprettet for den samme variabelen som ikke er minneeffektiv.
Ulemper ved å bruke Call by referansemetode
Her er de viktigste ulempene ved å bruke samtale etter referansemetode:
- Sterk ikke-null garanti. En funksjon som tar inn et referansebehov for å sikre at inngangen ikke er null. Derfor trenger ikke nullkontroll.
- Å passere ved referanse gjør at funksjonen ikke er ren teoretisk.
- Livstidsgaranti er et stort problem med referanser. Dette er spesielt farlig når du arbeider med lambdas og programmer med flere tråder.