V programskih jezikih lahko funkcije prikličete na dva načina: kar je znano kot Call by Value in Call by Reference.
V tej vadnici boste izvedeli,
- Kaj je klic po metodi vrednosti?
- Kaj je metoda Call by Reference?
- Primer klica z vrednostno metodo
- Primer klica z referenčno metodo
- Klic po vrednosti glede na klic po referenci
- Prednosti uporabe metode Call by value
- Prednosti uporabe klica z referenčno metodo
- Slabosti uporabe metode Call by value
- Slabosti uporabe klica z referenčno metodo
Kaj je metoda Call by Value?
Metoda klic po vrednosti kopira vrednost argumenta v formalni parameter te funkcije. Zato spremembe parametra glavne funkcije ne vplivajo na argument.
Pri tej metodi prenosa parametrov se vrednosti dejanskih parametrov kopirajo v formalne parametre funkcije in parametri se shranijo na različnih lokacijah pomnilnika. Vse spremembe znotraj funkcij se torej ne odražajo v dejanskih parametrih klicatelja.
KLJUČNA RAZLIKA
- Pri metodi Call by value prvotna vrednost ni spremenjena, medtem ko je pri Call by value metoda spremenjena prvotna vrednost.
- V Call by value se posreduje kopija spremenljivke, medtem ko se v Call by reference posreduje spremenljivka sama.
- V Call by value bodo dejanski in formalni argumenti ustvarjeni na različnih lokacijah pomnilnika, medtem ko bodo v Call by reference dejanski in formalni argumenti ustvarjeni na istem pomnilniškem mestu.
- Call by value je privzeta metoda v programskih jezikih, kot so C ++, PHP, Visual Basic NET in C #, medtem ko je Call by reference podprt samo v jeziku Java.
- Call by Value, spremenljivke se posredujejo z enostavno metodo, medtem ko Call by Reference, kazalci potrebujejo za shranjevanje naslova spremenljivk.
Kaj je metoda Call by Reference?
Klic z referenčno metodo kopira naslov argumenta v formalni parameter. Pri tej metodi se naslov uporablja za dostop do dejanskega argumenta, uporabljenega v klicu funkcije. To pomeni, da spremembe parametra spremenijo posredujoči argument.
Pri tej metodi je dodelitev pomnilnika enaka dejanskim parametrom. Vse operacije v funkciji se izvajajo na vrednosti, shranjeni na naslovu dejanskega parametra, spremenjena vrednost pa bo shranjena na istem naslovu.
Primer metode Call by Value
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;}
Izhod:
before function calling 10value is 11after function calling 1-0
Ker se spremenljivka, deklarirana z 'a'in main (), razlikuje od spremenljivke' x 'v koraku (). V tem programu so podobna samo imena spremenljivk, vendar so njihovi naslovi v pomnilniku različni in shranjeni na različnih lokacijah pomnilnika.
Primer klica z referenčno metodo
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;}
Izhod:
Before call Value of a =10After call Value of a =11
Ker spremenljivka, deklarirana z 'a', se sklicuje / kaže na spremenljivko 'a' v main (). Tu je ime spremenljivke drugačno, vendar obe usmerjata / sklicujeta na iste lokacije naslovov v pomnilniku.
Klic po vrednosti glede na klic po referenci
Parametri | Pokliči po vrednosti | Pokličite po referenci |
---|---|---|
Definicija | Medtem ko kličete funkcijo, je pri prenosu vrednosti s kopiranjem spremenljivk znana kot »Pokliči po vrednostih«. | Med klicanjem funkcije se v programskem jeziku namesto kopiranja vrednosti spremenljivk uporablja naslov spremenljivk, ki je znan kot "Pokliči po referencah". |
Argumenti | Pri tej metodi se posreduje kopija spremenljivke. | Pri tej metodi se posreduje spremenljivka sama. |
Učinek | Spremembe, narejene v kopiji spremenljivke, nikoli ne spremenijo vrednosti spremenljivke zunaj funkcije. | Sprememba spremenljivke vpliva tudi na vrednost spremenljivke zunaj funkcije. |
Sprememba vrednosti | Ne omogoča spreminjanja dejanskih spremenljivk. | Omogoča spreminjanje vrednosti spremenljivk z uporabo funkcijskih klicev. |
Prenos spremenljivke | Vrednosti spremenljivk se posredujejo z enostavno metodo. | Kazalne spremenljivke so potrebne za shranjevanje naslova spremenljivk. |
Sprememba vrednosti | Prvotna vrednost ni spremenjena. | Prvotna vrednost je spremenjena. |
Lokacija pomnilnika | Dejanski in formalni argumenti bodo ustvarjeni na različnih lokacijah pomnilnika | Dejanski in formalni argumenti bodo ustvarjeni na istem pomnilniškem mestu |
Varnost | Dejanski argumenti ostajajo varni, saj jih ni mogoče nenamerno spremeniti. | Dejanski argumenti niso varni. Lahko jih slučajno spremenite, zato morate skrbno ravnati z argumenti. |
Privzeto | Privzeto v mnogih programskih jezikih, kot je C ++. PHP. Visual Basic NET in C #. | Podpira ga večina programskih jezikov, kot je JAVA, vendar ne privzeto. |
Prednosti uporabe metode Call by value
Prednosti / koristi klica po vrednostni metodi:
- Metoda ne spremeni prvotne spremenljivke, zato ohranja podatke.
- Kadar koli jo pokličete, nikoli ne vplivajte na dejansko vsebino dejanskih argumentov.
- Vrednost dejanskih argumentov, posredovanih formalnim argumentom, zato kakršne koli spremembe formalnega argumenta ne vplivajo na dejanske primere.
Prednosti uporabe klica z referenčno metodo
Prednosti uporabe klica z referenčno metodo:
- Funkcija lahko spremeni vrednost argumenta, kar je zelo koristno.
- Ne ustvari podvojenih podatkov, ki vsebujejo samo eno vrednost, kar vam pomaga prihraniti prostor v pomnilniku.
- Pri tej metodi ni nobene kopije podanega argumenta. Zato se obdela zelo hitro.
- Pomaga vam, da se izognete napakam
- Oseba, ki bere kodo, nikoli ne ve, da je vrednost mogoče spremeniti v funkciji.
Slabosti uporabe metode Call by value
Tu so glavne slabosti / pomanjkljivosti klica po metodi vrednosti:
- Spremembe dejanskih parametrov lahko spremenijo tudi ustrezne spremenljivke argumentov
- Pri tej metodi morajo biti argumenti spremenljivke.
- Spremenljivke v telesu funkcije ne morete neposredno spremeniti.
- Argument je včasih lahko zapleten izraz
- Obstajata dve kopiji, ustvarjeni za isto spremenljivko, ki ni pomnilniško učinkovita.
Slabosti uporabe klica z referenčno metodo
Tu so glavne slabosti uporabe klica z referenčno metodo:
- Močna garancija, ki ni nična. Funkcija, ki se sklicuje, mora zagotoviti, da vhod ni nič. Zato ni treba preveriti ničnosti.
- Če gremo mimo reference, funkcija teoretično ni čista.
- Doživljenjska garancija je pri referencah velika težava. To je še posebej nevarno pri delu z lambdami in večnitnimi programi.