Razlika med klicem po vrednosti in klicem po referenci

Kazalo:

Anonim

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.