Skirtumas tarp skambučio pagal vertę ir skambučio pagal nuorodą

Programavimo kalbomis funkcijos gali būti iškviestos dviem būdais: tai vadinama skambučiu pagal vertę ir skambučiu pagal nuorodą.

Šioje pamokoje sužinosite,

Kas yra skambinimo pagal vertę metodas?

Skambinimo pagal vertę metodas nukopijuoja argumento vertę į oficialų tos funkcijos parametrą. Todėl pagrindinės funkcijos parametro pakeitimai neturi įtakos argumentui.

Taikant šį parametrų perdavimo metodą, faktinių parametrų reikšmės nukopijuojamos į oficialius funkcijos parametrus, o parametrai saugomi skirtingose ​​atminties vietose. Taigi visi funkcijų pakeitimai neatsispindi tikruosiuose skambinančiojo parametruose.

PAGRINDINIS SKIRTUMAS

  • Skambučio pagal vertę metodo pradinė vertė nekeičiama, o naudojant skambinimo pagal pamatinį metodą - pradinė vertė.
  • Skambučio pagal vertę atveju perduodama kintamojo kopija, o skambinant pagal nuorodą - perduodamas pats kintamasis.
  • Skambinant pagal vertę, faktiniai ir formalūs argumentai bus sukurti skirtingose ​​atminties vietose, o skambinant pagal nuorodą - faktiniai ir formalūs argumentai bus sukurti toje pačioje atminties vietoje.
  • Skambinimas pagal vertę yra numatytasis programavimo kalbų, tokių kaip C ++, PHP, „Visual Basic NET“ ir C#, metodas, o skambinimas pagal nuorodą palaikomas tik „Java“ kalba.
  • Skambinkite pagal vertę, kintamieji perduodami naudojant paprastą metodą, o iškvietimas pagal nuorodą - rodyklės reikalingos kintamųjų adresams išsaugoti.

Kas yra skambinimo pagal nuorodą metodas?

Skambinimas pagal nuorodos metodą nukopijuoja argumento adresą į oficialų parametrą. Taikant šį metodą, adresas naudojamas norint pasiekti faktinį funkcijos iškvietos argumentą. Tai reiškia, kad parametro pakeitimai keičia praeinantį argumentą.

Taikant šį metodą, atminties paskirstymas yra toks pat kaip ir faktiniai parametrai. Visos funkcijos operacijos atliekamos naudojant vertę, išsaugotą faktinio parametro adresu, o pakeista vertė bus išsaugota tuo pačiu adresu.

Skambučio pagal vertę metodo pavyzdys

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

Išėjimas:

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

Kadangi kintamasis, paskelbtas „a“ pagrindiniame (), skiriasi nuo kintamojo „x“ didinant (). Šioje programoje tik kintamųjų pavadinimai yra panašūs, tačiau jų atminties adresas yra skirtingas ir saugomas skirtingose ​​atminties vietose.

Skambučio pagal nuorodą metodo pavyzdys

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

Išėjimas:

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

Kadangi kintamasis, paskelbtas „a“, nurodo/ nurodo kintamąjį „a“ pagrindiniame (). Čia kintamojo pavadinimas skiriasi, tačiau abu jie nurodo/nurodo tas pačias atminties adresų vietas.

Skambinimas pagal vertę ir skambutis pagal nuorodą

Parametrai Skambinkite pagal vertę Skambinkite pagal nuorodą
ApibrėžimasSkambinant funkcijai, kai perduodate reikšmes kopijuodami kintamuosius, ji vadinama „Skambinti pagal vertes“.Skambinant funkcijai, programavimo kalba vietoj kintamųjų reikšmių kopijavimo naudojamas kintamųjų adresas, jis vadinamas „Call By References“.
ArgumentaiTaikant šį metodą, perduodama kintamojo kopija.Šiuo metodu perduodamas pats kintamasis.
PoveikisKintamojo kopijoje atlikti pakeitimai niekada nekeičia kintamojo vertės už funkcijos ribų.Kintamojo pakeitimas taip pat turi įtakos kintamojo vertei už funkcijos ribų.
Vertės keitimasNeleidžia keisti faktinių kintamųjų.Leidžia keisti kintamųjų reikšmes naudojant funkcijų iškvietimus.
Kintamojo perdavimasKintamųjų vertės perduodamos naudojant paprastą metodą.Rodyklės kintamieji reikalingi kintamųjų adresams išsaugoti.
Vertės keitimasPradinė vertė nepakeista.Pradinė vertė pakeista.
Atminties vietaFaktiniai ir formalūs argumentai bus sukurti skirtingose ​​atminties vietoseFaktiniai ir formalūs argumentai bus sukurti toje pačioje atminties vietoje
SaugaFaktiniai argumentai išlieka saugūs, nes jų negalima pakeisti atsitiktinai.Faktiniai argumentai nėra saugūs. Jie gali būti netyčia modifikuoti, todėl jums reikia atidžiai tvarkyti argumentų operacijas.
NumatytasNumatytasis daugelyje programavimo kalbų, tokių kaip C ++. PHP. Visual Basic NET ir C#.Jį palaiko dauguma programavimo kalbų, tokių kaip JAVA, bet ne pagal numatytuosius nustatymus.

„Call by value“ metodo naudojimo pranašumai

Skambučio privalumai/privalumai pagal vertės metodą:

  • Šis metodas nekeičia pradinio kintamojo, todėl išsaugo duomenis.
  • Kai funkcija vadinama, niekada nepaveikite tikrojo argumentų turinio.
  • Faktinių argumentų vertė perduodama oficialiems argumentams, todėl bet kokie formaliojo argumento pakeitimai neturi įtakos tikriems atvejams.

Skambučio naudojant pamatinį metodą privalumai

Privalumai naudojant skambinimą pagal pamatinį metodą:

  • Funkcija gali pakeisti argumento vertę, o tai yra gana naudinga.
  • Tai nesukuria pasikartojančių duomenų, skirtų tik vienai vertei laikyti, o tai padeda sutaupyti vietos atmintyje.
  • Taikant šį metodą nėra pateiktos argumento kopijos. Todėl jis apdorojamas labai greitai.
  • Padeda išvengti klaidų padarytų pakeitimų
  • Žmogus, skaitantis kodą, niekada nežino, kad funkciją galima keisti.

„Call by value“ metodo naudojimo trūkumai

Čia yra pagrindiniai skambučio pagal vertės metodą trūkumai/trūkumai:

  • Faktinių parametrų pakeitimai taip pat gali pakeisti atitinkamus argumentų kintamuosius
  • Taikant šį metodą argumentai turi būti kintamieji.
  • Negalite tiesiogiai pakeisti kintamojo funkcijų turinyje.
  • Kartais argumentai gali būti sudėtingos išraiškos
  • Yra sukurtos dvi kopijos tam pačiam kintamajam, kuris nenaudoja atminties.

Skambučio naudojant pamatinį metodą trūkumai

Čia yra pagrindiniai skambučių naudojant pamatinį metodą trūkumai:

  • Stipri, niekinė garantija. Funkcija, gaunanti nuorodą, turi įsitikinti, kad įvestis nėra nulinė. Todėl nulinio patikrinimo atlikti nereikia.
  • Praėjus nuorodą, funkcija teoriškai nėra gryna.
  • Garantija visam gyvenimui yra didelė problema su nuorodomis. Tai ypač pavojinga dirbant su lambda ir daugiasluoksnėmis programomis.