Razlika između poziva prema vrijednosti i poziva prema referenci

Ključna razlika između poziva prema vrijednosti i poziva prema referenci

  • U metodi poziva po vrijednosti izvorna vrijednost se ne mijenja, dok se u metodi poziva po referenci 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 bit će kreirani na različitim memorijskim lokacijama, dok će u Call by reference stvarni i formalni argumenti biti kreirani na istoj memorijskoj lokaciji.
  • Poziv prema vrijednosti zadana je metoda u programskim jezicima poput C++, PHP, Visual Basic NET i C#, dok je poziv po referenci podržan samo u Java Jezik.
  • Varijable Call by Value prosljeđuju se jednostavnom metodom, dok su pokazivači Call by Reference potrebni za pohranu adrese varijabli.

Razlika između poziva prema vrijednosti i poziva prema referenci

U programskim jezicima funkcije se mogu pozvati na dva načina: što je poznato kao poziv po vrijednosti i poziv po referenci.

Što je metoda poziva prema vrijednosti?

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

U ovoj metodi prosljeđivanja parametara, vrijednosti stvarnih parametara kopiraju se u formalne parametre funkcije, a parametri se pohranjuju na različitim memorijskim lokacijama. Stoga se sve promjene unutar funkcija ne odražavaju na stvarne parametre pozivatelja.

Što je metoda poziva po referenci?

Metoda poziva po referenci kopira adresu argumenta u formalni parametar. U ovoj metodi, adresa se koristi za pristup stvarnom argumentu koji se koristi u pozivu funkcije. To znači da promjene napravljene u parametru mijenjaju prolazni argument.

U ovoj metodi, dodjela memorije ista je kao stvarni parametri. Sve operacije u funkciji izvode se na vrijednosti pohranjenoj na adresi stvarnog parametra, a modificirana vrijednost bit će pohranjena na istoj adresi.

Primjer C koda metode poziva prema vrijednosti

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 10
value is 11
after function calling 1-0

Budući da se varijabla deklarirana 'a' u main() razlikuje od varijable 'x' u increment(). U ovom programu samo su imena varijabli slična, ali su njihove memorijske adrese različite i pohranjene na različitim memorijskim mjestima.

Java Primjer koda metode poziva po referenci

Public static void main(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 =10
After call Value of a =11

Budući da varijabla deklarirana 'a' u referencira/pokazuje na varijablu 'a' u main(). Ovdje je naziv varijable drugačiji, ali oba pokazuju/referenciraju na iste lokacije memorijske adrese.

Poziv prema vrijednosti naspram poziva po referenci

Parametri Nazovite prema vrijednosti Nazovite putem reference
Definicija Kada pozivate funkciju, kada prosljeđujete vrijednosti kopiranjem varijabli, to je poznato kao "Poziv prema vrijednostima". Prilikom pozivanja funkcije, u programskom jeziku umjesto kopiranja vrijednosti varijabli, koristi se adresa varijabli, što je poznato kao “Poziv po referencama”.
argumenti U ovoj metodi prosljeđuje se kopija varijable. U ovoj metodi prosljeđuje se sama varijabla.
Posljedica Promjene 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 da napravite bilo kakve promjene u stvarnim varijablama. Omogućuje vam da napravite promjene u vrijednostima varijabli pomoću poziva funkcija.
Prijenos varijable Vrijednosti varijabli prosljeđuju se jednostavnom metodom. Pokazivačke varijable potrebne su za pohranjivanje adrese varijabli.
Promjena vrijednosti Izvorna vrijednost nije promijenjena. Izvorna vrijednost je izmijenjena.
Mjesto memorije Stvarni i formalni argumenti
stvarat će se u različitim
mjesto memorije
Stvarni i formalni argumenti
nastat će u istoj
mjesto memorije
Sigurnosni Stvarni argumenti ostaju
sigurni jer se ne mogu mijenjati
slučajno.
Stvarni argumenti nisu
Sef. Oni mogu biti
slučajno izmijenjen, tako da morate pažljivo rukovati operacijama argumenata.
Zadano Zadana u mnogim programima
jezicima poput C++.PHP. Visual Basic NET i C#.
Podržava ga većina
programski jezici poput JAVE, ali
ne kao zadano.

Prednosti korištenja metode Call by value u C-u

Prednosti/prednosti poziva prema vrijednosti u C:

  • Metoda ne mijenja izvornu varijablu, tako da čuva podatke.
  • Kad god se funkcija pozove, nikada ne utječe na stvarni sadržaj stvarnih argumenata.
  • Vrijednost stvarnih argumenata prenesena je na formalne argumente, tako da sve promjene napravljene u formalnom argumentu ne utječu na stvarne slučajeve.

Prednosti korištenja metode poziva pozivom

Prednosti korištenja poziva referentnom metodom:

  • Funkcija može promijeniti vrijednost argumenta, što je vrlo korisno.
  • Ne stvara duple podatke za držanje samo jedne vrijednosti što vam pomaže da uštedite memorijski prostor.
  • U ovoj metodi ne postoji kopija napravljenog argumenta. Stoga se vrlo brzo obrađuje.
  • Pomaže vam da izbjegnete promjene učinjene greškom
  • Osoba koja čita kod nikada ne zna da se vrijednost može mijenjati u funkciji.

Nedostaci korištenja metode Call by value

Evo glavnih mana/nedostataka metode poziva prema vrijednosti:

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

Nedostaci korištenja metode poziva po referenci

Ovdje su glavni nedostaci upotrebe poziva referentnom metodom:

  • Snažno jamstvo bez nule. Funkcija koja uzima referencu mora osigurati da unos nije null. Stoga ne treba napraviti nultu provjeru.
  • Prijenos po referenci čini funkciju nečistom teoretski.
  • Doživotno jamstvo je veliki problem s referencama. Ovo je posebno opasno kada radite s lambdama i programima s više niti.