Razlika između poziva prema vrijednosti i poziva prema referenci

Sadržaj:

Anonim

U programskim jezicima, funkcije se mogu pozivati ​​na dva načina: koji je poznat pod nazivom Call by Value i Call by Reference.

U ovom ćete tutorijalu naučiti,

  • Što je poziv metodom vrijednosti?
  • Što je metoda Call by Reference?
  • Primjer poziva metodom vrijednosti
  • Primjer poziva referentnom metodom
  • Poziv prema vrijednosti u odnosu na poziv po referenci
  • Prednosti upotrebe metode Call by value
  • Prednosti upotrebe poziva referentnom metodom
  • Mane upotrebe metode Call by value
  • Nedostaci korištenja poziva referentnom metodom

Što je metoda poziva pomoću vrijednosti?

Metoda poziva po vrijednosti kopira vrijednost argumenta u formalni parametar te funkcije. Stoga promjene parametra glavne funkcije ne utječu na argument.

U ovoj metodi prenošenja parametara, vrijednosti stvarnih parametara kopiraju se u formalne parametre funkcije, a parametri su pohranjeni na različitim memorijskim mjestima. Dakle, sve promjene napravljene unutar funkcija ne odražavaju se u stvarnim parametrima pozivatelja.

KLJUČNA RAZLIKA

  • U metodi Call by value izvorna vrijednost se ne mijenja, dok se u Call by value metodu izvorna vrijednost mijenja.
  • U Call by value prosljeđuje se kopija varijable, dok se u Call by reference prosljeđuje sama varijabla.
  • U Call by value, stvarni i formalni argumenti stvorit će se na različitim memorijskim mjestima, dok će se u Call by reference stvarni i formalni argumenti stvoriti na istom memorijskom mjestu.
  • Call by value zadana je metoda u programskim jezicima kao što su C ++, PHP, Visual Basic NET i C #, dok Call by reference podržava samo Java jezik.
  • Call by Value, varijable se prosljeđuju jednostavnom metodom, dok Call by Reference, pokazivači trebaju pohraniti adresu varijabli.

Što je metoda Call by Reference?

Poziv referentnom metodom kopira adresu argumenta u formalni parametar. U ovoj se metodi adresa koristi za pristup stvarnom argumentu koji se koristi u pozivu funkcije. To znači da promjene napravljene u parametru mijenjaju argument koji prolazi.

U ovoj je metodi dodjela memorije jednaka stvarnim parametrima. Sve operacije u funkciji izvode se na vrijednosti pohranjenoj na adresi stvarnog parametra, a izmijenjena vrijednost pohranit će se na istoj adresi.

Primjer metode poziva vrijednošću

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;}

Izlaz:

before function calling 10value is 11after function calling 1-0

Budući da se varijabla deklarirana 'a'in main () razlikuje od varijable' x 'u inkrementu (). U ovom su programu samo imena varijabli slična, ali njihova memorijska adresa je različita i pohranjena na različitim memorijskim mjestima.

Primjer poziva pozivanjem referentne metode

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;}

Izlaz:

Before call Value of a =10After call Value of a =11

Budući da je varijabla deklarirana 'a' u referenci / usmjeravanju na varijablu 'a' u main (). Ovdje se naziv varijable razlikuje, ali oba usmjeravaju / upućuju na iste lokacije adresa memorije.

Poziv prema vrijednosti u odnosu na poziv po referenci

Parametri Nazovite prema vrijednosti Nazovite putem reference
Definicija Dok pozivate funkciju, kada prosljeđujete vrijednosti kopiranjem varijabli, ona je poznata kao "Poziv prema vrijednostima". Dok se poziva funkcija, u programskom jeziku umjesto kopiranja vrijednosti varijabli koristi se adresa varijabli koja je poznata kao "Poziv referencama".
Argumenti U ovoj se metodi prosljeđuje kopija varijable. U ovoj se metodi prenosi sama varijabla.
Utjecaj Izmjene napravljene u kopiji varijable nikada ne mijenjaju vrijednost varijable izvan funkcije. Promjena varijable također utječe na vrijednost varijable izvan funkcije.
Promjena vrijednosti Ne dopušta vam promjene u stvarnim varijablama. Omogućuje vam promjenu vrijednosti varijabli pomoću poziva funkcije.
Prolazak varijable Vrijednosti varijabli prenose se jednostavnom metodom. Varijable pokazivača potrebne su za pohranu adrese varijabli.
Izmjena vrijednosti Izvorna vrijednost nije promijenjena. Izvorna vrijednost je izmijenjena.
Mjesto memorije Stvarni i formalni argumenti stvorit će se na različitim memorijskim mjestima Stvarni i formalni argumenti stvorit će se na istom memorijskom mjestu
Sigurnost Stvarni argumenti ostaju sigurni jer se ne mogu slučajno izmijeniti. Stvarni argumenti nisu sigurni. Mogu se slučajno izmijeniti, tako da morate pažljivo postupati s argumentima.
Zadano Zadano u mnogim programskim jezicima poput C ++. PHP. Visual Basic NET i C #. Podržava ga većina programskih jezika poput JAVA, ali ne kao zadani.

Prednosti upotrebe metode Call by value

Pros / blagodati poziva vrijednosnom metodom:

  • Metoda ne mijenja izvornu varijablu, pa čuva podatke.
  • Kad god se funkcija zove, nikada ne utječite na stvarni sadržaj stvarnih argumenata.
  • Vrijednost stvarnih argumenata proslijeđenih formalnim argumentima, tako da sve promjene učinjene u formalnom argumentu ne utječu na stvarne slučajeve.

Prednosti upotrebe poziva referentnom metodom

Prednosti upotrebe poziva referentnom metodom:

  • Funkcija može promijeniti vrijednost argumenta, što je vrlo korisno.
  • Ne stvara duplikate podataka koji sadrže samo jednu vrijednost što vam pomaže uštedjeti memorijski prostor.
  • U ovoj metodi ne postoji kopija iznesenog argumenta. Stoga se obrađuje vrlo brzo.
  • Pomaže vam u izbjegavanju grešaka izvršenih
  • Osoba koja čita kôd nikad ne zna da se vrijednost može mijenjati u funkciji.

Mane upotrebe metode Call by value

Evo glavnih nedostataka / nedostataka poziva vrijednosnom metodom:

  • Promjene stvarnih parametara mogu također modificirati odgovarajuće varijable argumenta
  • U ovoj metodi argumenti moraju biti varijable.
  • Ne možete izravno promijeniti varijablu u tijelu funkcije.
  • Argumenti ponekad mogu biti složeni izrazi
  • Postoje dvije kopije stvorene za istu varijablu koja nije memorijski učinkovita.

Nedostaci korištenja poziva referentnom metodom

Evo glavnih nedostataka upotrebe poziva referentnom metodom:

  • Snažno nevaljano jamstvo. Funkcija koja uzima referencu mora biti sigurna da unos nije null. Stoga nije potrebno izvršiti provjeru nule.
  • Prolazak referencom čini funkciju teorijski ne čistom.
  • Doživotno jamstvo veliki je problem s referencama. To je posebno opasno pri radu s lambdama i programima s više niti.