Nei linguaggi di programmazione, le funzioni possono essere invocate in due modi: che è noto come Call by Value e Call by Reference.
In questo tutorial imparerai,
- Cos'è il metodo call by value?
- Cos'è il metodo Call by Reference?
- Esempio di una chiamata per metodo di valore
- Esempio di una chiamata tramite metodo di riferimento
- Call by Value vs. Call by Reference
- Vantaggi dell'utilizzo del metodo Call by value
- Vantaggi dell'utilizzo di Call by reference method
- Svantaggi dell'utilizzo del metodo Call by value
- Svantaggi dell'utilizzo di Call by reference method
Cos'è il metodo Call by Value?
Il metodo Call by value copia il valore di un argomento nel parametro formale di quella funzione. Pertanto, le modifiche apportate al parametro della funzione principale non influiscono sull'argomento.
In questo metodo di passaggio dei parametri, i valori dei parametri effettivi vengono copiati nei parametri formali della funzione ei parametri vengono memorizzati in diverse posizioni di memoria. Pertanto, qualsiasi modifica apportata all'interno delle funzioni non si riflette nei parametri effettivi del chiamante.
DIFFERENZA CHIAVE
- In Call by value metodo il valore originale non viene modificato mentre, in Call by metodo di riferimento, il valore originale viene modificato.
- In Call by value, viene passata una copia della variabile, mentre in Call by reference, viene passata una variabile stessa.
- In Call by value, gli argomenti effettivi e formali verranno creati in diverse posizioni di memoria mentre in Call by reference, gli argomenti effettivi e formali verranno creati nella stessa posizione di memoria.
- La chiamata per valore è il metodo predefinito nei linguaggi di programmazione come C ++, PHP, Visual Basic NET e C #, mentre la chiamata per riferimento è supportata solo in linguaggio Java.
- Call by Value, le variabili vengono passate utilizzando un metodo semplice mentre Call by Reference, sono necessari puntatori per memorizzare l'indirizzo delle variabili.
Cos'è il metodo Call by Reference?
Il metodo Call by reference copia l'indirizzo di un argomento nel parametro formale. In questo metodo, l'indirizzo viene utilizzato per accedere all'argomento effettivo utilizzato nella chiamata di funzione. Significa che le modifiche apportate al parametro alterano l'argomento che passa.
In questo metodo, l'allocazione della memoria è la stessa dei parametri effettivi. Tutte le operazioni nella funzione vengono eseguite sul valore memorizzato all'indirizzo del parametro attuale, e il valore modificato verrà memorizzato allo stesso indirizzo.
Esempio di un metodo Call by Value
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;}
Produzione:
before function calling 10value is 11after function calling 1-0
Perché la variabile dichiarata 'a'in main () è diversa dalla variabile' x 'in increment (). In questo programma solo i nomi delle variabili sono simili, ma il loro indirizzo di memoria è diverso e memorizzato in diverse posizioni di memoria.
Esempio di un metodo Call by Reference
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;}
Produzione:
Before call Value of a =10After call Value of a =11
Perché la variabile dichiarata 'a' in fa riferimento / punta alla variabile 'a' in main (). Qui il nome della variabile è diverso, ma entrambi puntano / fanno riferimento alle stesse posizioni degli indirizzi di memoria.
Call by Value vs. Call by Reference
Parametri | Chiama per valore | Chiama per riferimento |
---|---|---|
Definizione | Quando si chiama una funzione, quando si passano valori copiando le variabili, è noto come "Call By Values". | Durante la chiamata di una funzione, nel linguaggio di programmazione invece di copiare i valori delle variabili, viene utilizzato l'indirizzo delle variabili noto come "Call By References". |
argomenti | In questo metodo, viene passata una copia della variabile. | In questo metodo, viene passata una variabile stessa. |
Effetto | Le modifiche apportate in una copia della variabile non modificano mai il valore della variabile al di fuori della funzione. | Il cambiamento nella variabile influisce anche sul valore della variabile al di fuori della funzione. |
Alterazione di valore | Non consente di apportare modifiche alle variabili effettive. | Consente di apportare modifiche ai valori delle variabili utilizzando chiamate di funzione. |
Passaggio di variabile | I valori delle variabili vengono passati utilizzando un metodo semplice. | Le variabili puntatore sono necessarie per memorizzare l'indirizzo delle variabili. |
Modifica del valore | Valore originale non modificato. | Il valore originale viene modificato. |
Posizione di memoria | Gli argomenti effettivi e formali verranno creati in diverse posizioni di memoria | Gli argomenti effettivi e formali verranno creati nella stessa posizione di memoria |
Sicurezza | Gli argomenti effettivi rimangono al sicuro in quanto non possono essere modificati accidentalmente. | Gli argomenti effettivi non sono sicuri. Possono essere modificati accidentalmente, quindi è necessario gestire con attenzione le operazioni sugli argomenti. |
Predefinito | Predefinito in molti linguaggi di programmazione come C ++. PHP. Visual Basic NET e C #. | È supportato dalla maggior parte dei linguaggi di programmazione come JAVA, ma non come impostazione predefinita. |
Vantaggi dell'utilizzo del metodo Call by value
Pro / vantaggi di una chiamata in base al metodo di valore:
- Il metodo non modifica la variabile originale, quindi preserva i dati.
- Ogni volta che viene chiamata una funzione, non influisce mai sul contenuto effettivo degli argomenti effettivi.
- Il valore degli argomenti effettivi passati agli argomenti formali, quindi qualsiasi modifica apportata all'argomento formale non influisce sui casi reali.
Vantaggi dell'utilizzo di Call by reference method
Vantaggi dell'utilizzo della chiamata per metodo di riferimento:
- La funzione può modificare il valore dell'argomento, il che è abbastanza utile.
- Non crea dati duplicati per contenere un solo valore che ti aiuta a risparmiare spazio di memoria.
- In questo metodo, non c'è copia dell'argomento fatto. Pertanto viene elaborato molto velocemente.
- Ti aiuta a evitare modifiche fatte per errore
- Una persona che legge il codice non sa mai che il valore può essere modificato nella funzione.
Svantaggi dell'utilizzo del metodo Call by value
Ecco i principali svantaggi / svantaggi di una chiamata in base al metodo di valore:
- Le modifiche ai parametri effettivi possono anche modificare le variabili degli argomenti corrispondenti
- In questo metodo, gli argomenti devono essere variabili.
- Non è possibile modificare direttamente una variabile nel corpo di una funzione.
- A volte l'argomento può essere espressioni complesse
- Esistono due copie create per la stessa variabile che non è efficiente in termini di memoria.
Svantaggi dell'utilizzo di Call by reference method
Ecco i principali svantaggi dell'utilizzo della chiamata per metodo di riferimento:
- Forte garanzia non nulla. Una funzione che accetta un riferimento deve assicurarsi che l'input non sia nullo. Pertanto, non è necessario eseguire un controllo nullo.
- Il passaggio per riferimento rende la funzione non pura teoricamente.
- Una garanzia a vita è un grosso problema con i riferimenti. Questo è particolarmente pericoloso quando si lavora con lambda e programmi multi-thread.