Ohjelmointikielillä toimintoja voidaan kutsua kahdella tavalla: joka tunnetaan nimellä Call by Value ja Call by Reference.
Tässä opetusohjelmassa opit,
- Mikä on kutsu arvomenetelmällä?
- Mikä on Call by Reference -menetelmä?
- Esimerkki puhelusta arvomenetelmällä
- Esimerkki kutsusta vertailumenetelmällä
- Soita arvolla vs. Soita viitteellä
- Edut Call by value -menetelmän käytöstä
- Edut puhelun käyttämisestä vertailumenetelmällä
- Call by value -menetelmän käytön haitat
- Haittatapahtuman käytön haitat
Mikä on Call by Value -menetelmä?
Kutsu arvomenetelmällä kopioi argumentin arvon funktion muodolliseen parametriin. Siksi pääfunktion parametriin tehdyt muutokset eivät vaikuta argumenttiin.
Tässä parametrin välitysmenetelmässä todellisten parametrien arvot kopioidaan funktion muodollisiin parametreihin ja parametrit tallennetaan eri muistipaikkoihin. Joten toimintojen sisällä tehdyt muutokset eivät näy soittajan todellisissa parametreissa.
TÄRKEÄ ERO
- Call call value -menetelmässä alkuperäistä arvoa ei muuteta, kun taas Call by reference -menetelmässä alkuperäistä arvoa muutetaan.
- Soittajan arvo -toiminnossa muuttujan kopio välitetään, kun taas viitteellisessä puhelussa muuttuja itse välitetään.
- Soita arvon mukaan todelliset ja muodolliset argumentit luodaan eri muistipaikoihin, kun taas viitteellisessä puhelussa todelliset ja muodolliset argumentit luodaan samaan muistipaikkaan.
- Arvokutsu on oletusmenetelmä ohjelmointikielillä, kuten C ++, PHP, Visual Basic NET ja C #, kun taas viittaukseksi kutsuttu puhelu tukee vain Java-kieltä.
- Kutsu arvon mukaan, muuttujat välitetään yksinkertaisella menetelmällä, kun taas kutsut viitteellä-osoittimia tarvitaan muuttujien osoitteen tallentamiseen.
Mikä on Call by Reference -menetelmä?
Kutsu viitemenetelmällä kopioi argumentin osoitteen muodolliseen parametriin. Tässä menetelmässä osoitetta käytetään funktion kutsussa käytetyn varsinaisen argumentin käyttämiseen. Se tarkoittaa, että parametriin tehdyt muutokset muuttavat välitysargumenttia.
Tässä menetelmässä muistin allokointi on sama kuin todelliset parametrit. Kaikki toiminnon toiminnot suoritetaan arvoon, joka on tallennettu todellisen parametrin osoitteeseen, ja muokattu arvo tallennetaan samaan osoitteeseen.
Esimerkki Call by Value -menetelmästä
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;}
Tuotos:
before function calling 10value is 11after function calling 1-0
Koska muuttuja, joka on ilmoitettu a: ksi main (), eroaa muuttujasta x inkrementtinä (). Tässä ohjelmassa vain muuttujien nimet ovat samanlaisia, mutta niiden muistiosoite on erilainen ja se on tallennettu eri muistipaikkoihin.
Esimerkki Call by Reference -menetelmästä
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;}
Tuotos:
Before call Value of a =10After call Value of a =11
Koska muuttuja, joka on ilmoitettu 'a': ksi, viittaa / osoittaa muuttujaan 'a' main (). Tässä muuttujan nimi on erilainen, mutta molemmat osoittavat / viittaavat samoihin muistiosoitteiden sijainteihin.
Soita arvolla vs. Soita viitteellä
Parametrit | Soita arvon mukaan | Soita viitteenä |
---|---|---|
Määritelmä | Kun välität funktion, kun välität arvot kopioimalla muuttujia, se tunnetaan nimellä "Call By Values". | Kun kutsutaan toimintoa, ohjelmointikielessä muuttujien arvojen kopioinnin sijasta käytetään muuttujien osoitetta, joka tunnetaan nimellä "Call By References". |
Väitteet | Tässä menetelmässä kopio muuttujasta välitetään. | Tässä menetelmässä muuttuja itse välitetään. |
Vaikutus | Muuttujan kopiossa tehdyt muutokset eivät koskaan muuta muuttujan arvoa funktion ulkopuolella. | Muuttujan muutos vaikuttaa myös muuttujan arvoon funktion ulkopuolella. |
Arvon muuttaminen | Ei salli sinun tehdä muutoksia todellisiin muuttujiin. | Voit tehdä muutoksia muuttujien arvoihin funktiokutsujen avulla. |
Muuttujan välitys | Muuttujien arvot välitetään yksinkertaisella menetelmällä. | Osoitinmuuttujia tarvitaan muuttujien osoitteiden tallentamiseen. |
Arvon muutos | Alkuperäistä arvoa ei ole muutettu. | Alkuperäistä arvoa muutetaan. |
Muistin sijainti | Todelliset ja muodolliset argumentit luodaan eri muistipaikoille | Todelliset ja muodolliset argumentit luodaan samaan muistipaikkaan |
Turvallisuus | Todelliset argumentit pysyvät turvassa, koska niitä ei voida muuttaa vahingossa. | Todelliset argumentit eivät ole turvallisia. Niitä voidaan muuttaa vahingossa, joten sinun on käsiteltävä argumenttitoimintoja huolellisesti. |
Oletus | Oletusarvo monilla ohjelmointikielillä, kuten C ++. PHP. Visual Basic NET ja C #. | Useimmat ohjelmointikielet, kuten JAVA, tukevat sitä, mutta ei oletuksena. |
Edut Call by value -menetelmän käytöstä
Edut / edut puhelusta arvomenetelmällä:
- Menetelmä ei muuta alkuperäistä muuttujaa, joten se säilyttää tietoja.
- Aina kun funktiota kutsutaan sille, älä koskaan vaikuta todellisten argumenttien todelliseen sisältöön.
- Muodollisille argumenteille siirrettyjen todellisten argumenttien arvo, joten muodollisessa argumentissa tehdyt muutokset eivät vaikuta todellisiin tapauksiin.
Edut puhelun käyttämisestä vertailumenetelmällä
Plussat kutsun käyttämisestä vertailumenetelmällä:
- Funktio voi muuttaa argumentin arvoa, mikä on varsin hyödyllinen.
- Se ei luo päällekkäisiä tietoja vain yhden arvon pitämiseen, mikä auttaa sinua säästämään muistia.
- Tässä menetelmässä argumentista ei ole kopiota. Siksi se käsitellään erittäin nopeasti.
- Auttaa välttämään vahingossa tehtyjä muutoksia
- Koodia lukeva henkilö ei koskaan tiedä, että arvoa voidaan muuttaa toiminnossa.
Call by value -menetelmän käytön haitat
Tässä ovat puhelun tärkeimmät haitat / haitat arvomenetelmällä:
- Todellisten parametrien muutokset voivat myös muokata vastaavia argumenttimuuttujia
- Tässä menetelmässä argumenttien on oltava muuttujia.
- Et voi muuttaa suoraan muuttujaa funktion rungossa.
- Joskus argumentti voi olla monimutkainen lauseke
- Samalle muuttujalle on luotu kaksi kopiota, joka ei ole muistia tehokas.
Haittatapahtuman käytön haitat
Tässä on tärkeimpiä haittoja kutsun vertailumenetelmällä käytöllä:
- Vahva ei-nolla-takuu. Viitteen ottavan funktion on varmistettava, että tulo ei ole nolla. Siksi ei tarvitse tehdä tyhjää tarkistusta.
- Viitteen välittäminen ei tee funktiosta teoreettisesti puhdasta.
- Elinikäinen takuu on iso kysymys viitteiden kanssa. Tämä on erityisen vaarallista työskenneltäessä lambdas-ohjelmien ja monisäikeisten ohjelmien kanssa.