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 skambutis pagal vertės metodą?
  • Kas yra skambinimo pagal metodą metodas?
  • Skambinimo pagal vertės metodą pavyzdys
  • Kvietimo pavyzdinis metodas pavyzdys
  • Skambinkite pagal vertę ir skambinkite pagal nuorodą
  • „Call by value“ metodo naudojimo pranašumai
  • Privalumai naudojant „Call“ pagal pamatinį metodą
  • „Call by value“ metodo naudojimo trūkumai
  • Trūkumai naudojant „Call by reference method“

Kas yra „Call by Value“ metodas?

„Call by value“ metodas nukopijuoja argumento vertę į oficialų tos funkcijos parametrą. Todėl pagrindinės funkcijos parametro pakeitimai neturi įtakos argumentui.

Taikant šį parametrų perdavimo metodą faktinių parametrų vertės nukopijuojamos į formalius funkcijos parametrus ir parametrai saugomi skirtingose ​​atminties vietose. Taigi bet kokie funkcijų pakeitimai neatsispindi tikruose skambinančiojo parametruose.

PAGRINDINIAI SKIRTUMAI

  • Taikant metodą „Skambinti pagal vertę“, pradinė vertė nekeičiama, o „Skambinti pagal referencinį“ metodą - pirminė vertė.
  • Skambinant pagal vertę, perduodama kintamojo kopija, o skambinant pagal nuorodą - 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 metodas programavimo kalbose, tokiose kaip C ++, PHP, Visual Basic NET ir C #, o skambinimas pagal nuorodą palaikomas tik „Java“ kalba.
  • Kvietimas pagal vertę, kintamieji perduodami taikant nesudėtingą metodą, o skambučiai pagal nuorodą - rodikliai reikalingi kintamųjų adresams išsaugoti.

Kas yra skambinimo pagal metodą metodas?

„Call by reference“ metodas nukopijuoja argumento adresą į oficialų parametrą. Šiuo metodu adresas naudojamas norint pasiekti faktinį argumentą, naudojamą funkcijos iškvietime. Tai reiškia, kad parametre atlikti pakeitimai keičia argumentą.

Taikant šį metodą, atminties paskirstymas yra toks pat kaip ir faktiniai parametrai. Visi funkcijos veiksmai atliekami su reikšme, išsaugota faktinio parametro adresu, o pakeista reikšmė bus išsaugota tuo pačiu adresu.

Skambinimo 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švestis:

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

Nes kintamasis, deklaruojamas „a“ main (), skiriasi nuo kintamojo „x“ prieaugiu (). Šioje programoje tik kintamųjų pavadinimai yra panašūs, tačiau jų atminties adresai yra skirtingi ir saugomi skirtingose ​​atminties vietose.

Kvietimo pagal pamatinį metodą 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švestis:

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

Nes kintamasis, paskelbtas „a“ in, nurodo / rodo kintamąjį „a“ pagrindiniame (). Čia kintamasis vardas yra kitoks, tačiau abu rodo / nurodo tas pačias atminties adresų vietas.

Skambinkite pagal vertę ir skambinkite pagal nuorodą

Parametrai Skambinkite pagal vertę Skambinkite pagal nuorodą
Apibrėžimas Kreipiantis į funkciją, kai perduodate reikšmes kopijuodami kintamuosius, ji vadinama „Call By Values“. Skambinant funkcijai, programavimo kalboje, užuot kopijavus kintamųjų reikšmes, naudojamas kintamųjų adresas, jis vadinamas „Call By References“.
Argumentai Taikant šį metodą, perduodama kintamojo kopija. Taikant šį metodą, perduodamas pats kintamasis.
Poveikis Kintamojo kopijoje atlikti pakeitimai niekada nekeičia kintamojo vertės už funkcijos ribų. Kintamojo pokytis taip pat turi įtakos kintamojo reikšmei už funkcijos ribų.
Vertės pakeitimas Neleidžia atlikti jokių faktinių kintamųjų pakeitimų. Leidžia atlikti kintamųjų reikšmių pakeitimus naudojant funkcijų iškvietimus.
Kintamojo perdavimas Kintamųjų reikšmės perduodamos taikant nesudėtingą metodą. Kintamieji kintamiesiems reikalingi norint išsaugoti kintamųjų adresus.
Vertės keitimas Pradinė vertė nepakeista. Originali vertė yra pakeista.
Atminties vieta Faktiniai ir formalūs argumentai bus sukurti skirtingose ​​atminties vietose Faktiniai ir formalūs argumentai bus sukurti toje pačioje atminties vietoje
Saugumas Faktiniai argumentai lieka saugūs, nes jų negalima pakeisti netyčia. Faktiniai argumentai nėra saugūs. Jie gali būti netyčia modifikuoti, todėl turite atidžiai elgtis su argumentų operacijomis.
Numatytas Numatytasis nustatymas daugeliu programavimo kalbų, pvz., C ++. PHP. Visual Basic NET ir C #. Ją palaiko dauguma programavimo kalbų, pvz., JAVA, bet ne kaip numatytoji.

„Call by value“ metodo naudojimo pranašumai

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

  • Metodas nekeičia pradinio kintamojo, todėl jis išsaugo duomenis.
  • Kai tik funkcija yra vadinama, niekada nedaryk įtakos faktinių argumentų turiniui.
  • Faktinių argumentų, perduotų oficialiems argumentams, vertė, todėl bet kokie formalaus argumento pakeitimai neturi įtakos realiems atvejams.

Privalumai naudojant „Call“ pagal pamatinį metodą

Argumentai apie skambučio naudojimą pagal pamatinį metodą:

  • Funkcija gali pakeisti argumento vertę, kuri yra gana naudinga.
  • Tai nesukuria duomenų kopijų, kad būtų galima laikyti tik vieną vertę, o tai padės sutaupyti vietos atmintyje.
  • Taikant šį metodą, argumento kopijos nėra. Todėl jis apdorojamas labai greitai.
  • Padeda išvengti klaidų padarytų pakeitimų
  • Asmuo, skaitantis kodą, niekada nežino, kad vertę galima pakeisti funkcijoje.

„Call by value“ metodo naudojimo trūkumai

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

  • Faktinių parametrų pakeitimai taip pat gali modifikuoti atitinkamus argumentų kintamuosius
  • Taikant šį metodą, argumentai turi būti kintamieji.
  • Negalite tiesiogiai keisti funkcijos kintamojo.
  • Kažkada argumentas gali būti sudėtingos išraiškos
  • Yra dvi to paties kintamojo, kuris nėra atminties reikalaujantis, kopijos.

Trūkumai naudojant „Call by reference method“

Čia yra pagrindiniai trūkumai naudojant skambutį pagal pamatinį metodą:

  • Stipri nenulinė garantija. Funkcija, priimanti nuorodą, turi įsitikinti, kad įvestis nėra nulinė. Todėl nereikia atlikti jokios patikros.
  • Perduodant nuorodą, funkcija teoriškai nėra gryna.
  • Viso gyvenimo garantija yra didelė problema, susijusi su nuorodomis. Tai ypač pavojinga dirbant su „lambdas“ ir daugialypėmis programomis.

Įdomios straipsniai...