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.