In programmeertalen kunnen functies op twee manieren worden aangeroepen: dit staat bekend als Call by Value en Call by Reference.
In deze tutorial leer je,
- Wat is call by value-methode?
- Wat is de methode Call by Reference?
- Voorbeeld van een call by value-methode
- Voorbeeld van een oproep via referentiemethode
- Oproep op waarde vs. oproep op referentie
- Voordelen van het gebruik van de methode Call by Value
- Voordelen van het gebruik van de methode Call by reference
- Nadelen van het gebruik van de methode Call by Value
- Nadelen van het gebruik van Call by reference-methode
Wat is de methode Call by Value?
Call by value-methode kopieert de waarde van een argument naar de formele parameter van die functie. Daarom hebben wijzigingen in de parameter van de hoofdfunctie geen invloed op het argument.
Bij deze methode voor het doorgeven van parameters worden waarden van werkelijke parameters gekopieerd naar de formele parameters van de functie en worden de parameters opgeslagen op verschillende geheugenlocaties. Dus alle wijzigingen die binnen functies worden aangebracht, worden niet weerspiegeld in de werkelijke parameters van de beller.
BELANGRIJK VERSCHIL
- In de methode Call by value wordt de oorspronkelijke waarde niet gewijzigd, terwijl in de methode Call by reference de oorspronkelijke waarde wordt gewijzigd.
- In Call by value wordt een kopie van de variabele doorgegeven, terwijl in Call by reference een variabele zelf wordt doorgegeven.
- In Call by value worden werkelijke en formele argumenten gemaakt op verschillende geheugenlocaties, terwijl in Call by reference daadwerkelijke en formele argumenten worden aangemaakt op dezelfde geheugenlocatie.
- Call by value is de standaardmethode in programmeertalen zoals C ++, PHP, Visual Basic NET en C #, terwijl Call by reference alleen Java-taal wordt ondersteund.
- Call by Value, variabelen worden doorgegeven met behulp van een eenvoudige methode, terwijl Call by Reference pointers nodig zijn om het adres van variabelen op te slaan.
Wat is de methode Call by Reference?
Call by reference-methode kopieert het adres van een argument naar de formele parameter. Bij deze methode wordt het adres gebruikt om toegang te krijgen tot het feitelijke argument dat in de functieaanroep wordt gebruikt. Het betekent dat wijzigingen die in de parameter zijn aangebracht, het passerende argument veranderen.
Bij deze methode is de geheugentoewijzing hetzelfde als de feitelijke parameters. Alle bewerkingen in de functie worden uitgevoerd op de waarde die is opgeslagen op het adres van de feitelijke parameter, en de gewijzigde waarde wordt op hetzelfde adres opgeslagen.
Voorbeeld van een Call by Value-methode
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;}
Uitgang:
before function calling 10value is 11after function calling 1-0
Omdat variabele gedeclareerd 'a'in main () verschilt van variabele' x 'in increment (). In dit programma zijn alleen variabelenamen vergelijkbaar, maar hun geheugenadres is verschillend en wordt op verschillende geheugenlocaties opgeslagen.
Voorbeeld van een Call by Reference-methode
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;}
Uitgang:
Before call Value of a =10After call Value of a =11
Omdat variabele gedeclareerd 'a' in verwijst naar / verwijst naar variabele 'a' in main (). Hier is de variabelenaam anders, maar beide wijzen / verwijzen naar dezelfde geheugenadreslocaties.
Oproep op waarde vs. oproep op referentie
Parameters | Bel op waarde | Bel door middel van referentie |
---|---|---|
Definitie | Wanneer u tijdens het aanroepen van een functie waarden doorgeeft door variabelen te kopiëren, staat deze bekend als "Call By Values". | Bij het aanroepen van een functie wordt in de programmeertaal in plaats van het kopiëren van de waarden van variabelen het adres van de variabelen gebruikt, het staat bekend als "Call By References. |
Argumenten | Bij deze methode wordt een kopie van de variabele doorgegeven. | Bij deze methode wordt een variabele zelf doorgegeven. |
Effect | Wijzigingen die zijn aangebracht in een kopie van een variabele, wijzigen nooit de waarde van de variabele buiten de functie. | Verandering in de variabele heeft ook invloed op de waarde van de variabele buiten de functie. |
Waardewijziging | Staat u niet toe om wijzigingen aan te brengen in de feitelijke variabelen. | Hiermee kunt u wijzigingen aanbrengen in de waarden van variabelen met behulp van functieaanroepen. |
Doorgeven van variabele | Waarden van variabelen worden doorgegeven met behulp van een eenvoudige methode. | Pointervariabelen zijn vereist om het adres van variabelen op te slaan. |
Waardewijziging | Oorspronkelijke waarde niet gewijzigd. | De oorspronkelijke waarde is gewijzigd. |
Geheugenlocatie | Werkelijke en formele argumenten worden op verschillende geheugenlocaties gemaakt | Werkelijke en formele argumenten worden op dezelfde geheugenlocatie gemaakt |
Veiligheid | Werkelijke argumenten blijven veilig omdat ze niet per ongeluk kunnen worden gewijzigd. | Werkelijke argumenten zijn niet veilig. Ze kunnen per ongeluk worden gewijzigd, dus u moet zorgvuldig omgaan met argumentenbewerkingen. |
Standaard | Standaard in veel programmeertalen zoals C ++. PHP. Visual Basic NET en C #. | Het wordt ondersteund door de meeste programmeertalen zoals JAVA, maar niet standaard. |
Voordelen van het gebruik van de methode Call by Value
Voordelen / voordelen van een call by value-methode:
- De methode verandert de oorspronkelijke variabele niet, dus het bewaart gegevens.
- Elke keer dat een functie wordt aangeroepen, heeft dit nooit invloed op de feitelijke inhoud van de werkelijke argumenten.
- De waarde van de werkelijke argumenten die aan de formele argumenten worden doorgegeven, dus wijzigingen die in het formele argument worden aangebracht, hebben geen invloed op de echte gevallen.
Voordelen van het gebruik van de methode Call by reference
Voordelen van het gebruik van oproep via referentiemethode:
- De functie kan de waarde van het argument veranderen, wat best handig is.
- Het creëert geen dubbele gegevens om slechts één waarde vast te houden, waardoor u geheugenruimte kunt besparen.
- Bij deze methode is er geen kopie van het argument gemaakt. Daarom wordt het erg snel verwerkt.
- Helpt u om per ongeluk aangebrachte wijzigingen te voorkomen
- Een persoon die de code leest, weet nooit dat de waarde in de functie kan worden gewijzigd.
Nadelen van het gebruik van de methode Call by Value
Hier zijn de belangrijkste nadelen / nadelen van een call by value-methode:
- Veranderingen in werkelijke parameters kunnen ook corresponderende argumentvariabelen wijzigen
- Bij deze methode moeten argumenten variabelen zijn.
- U kunt een variabele in de hoofdtekst van een functie niet rechtstreeks wijzigen.
- Soms kan een argument complexe uitdrukkingen zijn
- Er zijn twee kopieën gemaakt voor dezelfde variabele die niet geheugenefficiënt is.
Nadelen van het gebruik van Call by reference-methode
Hier zijn de belangrijkste nadelen van het gebruik van call by reference-methode:
- Sterke niet-nulgarantie. Een functie die een verwijzing opneemt, moet ervoor zorgen dat de invoer niet nul is. Daarom hoeft een nulcontrole niet te worden uitgevoerd.
- Passeren door middel van verwijzing maakt de functie niet puur theoretisch.
- Een levenslange garantie is een groot probleem bij referenties. Dit is vooral gevaarlijk bij het werken met lambda's en multi-threaded programma's.