Molti linguaggi di programmazione utilizzano le funzioni. Una funzione è un insieme di istruzioni per eseguire un'attività specifica. Il codice principale può essere suddiviso in diverse funzioni e chiamarle. Esistono due modi per chiamare una funzione come chiamata per valore e chiamata per riferimento. Nel metodo call by value, le copie delle variabili vengono passate nella funzione. Se c'è un cambiamento nel valore della funzione, non cambia il valore originale. Nella chiamata per riferimento, i cambiamenti della variabile all'interno della funzione riflettono il valore originale. Il differenza fondamentale tra call by value e call by reference è quello, in call by value, la copia delle variabili viene passata alla funzione e in chiamata per riferimento, gli indirizzi delle variabili vengono passati alla funzione. Questo articolo discute la differenza tra call by value e call by reference.
1. Panoramica e differenza chiave
2. Cos'è Call by Value
3. Cos'è Call by Reference
4. Somiglianze tra chiamata per valore e chiamata per riferimento
5. Confronto affiancato - Call by Value vs Call by Reference in Tabular Form
6. Sommario
In call by value, le copie delle variabili vengono passate alla funzione. La funzione può cambiare quel valore copiato ma non cambia il valore originale. Questo concetto può essere facilmente compreso scambiando due numeri di programma. Fare riferimento al programma C riportato di seguito, scritto utilizzando l'ambiente Code Blocks.
Figura 01: programma per scambiare due numeri
Secondo il programma indicato di seguito, la variabile 'a' ha valore 20 e la variabile 'b' ha valore 30. Quando si chiama la funzione swap (a, b), questi due valori vengono passati alla funzione swap. Nella funzione di scambio, 'a' è copiato in 'x' e 'b' è copiato in 'y'. Ora, 'x' sta avendo valore 20 e 'y' sta avendo valore 30. Usando la variabile temp i due valori vengono scambiati. Quando si stampa il valore di 'x' e 'y' all'interno di tale funzione di scambio, l'output darà 30 per 'x' e 20 per 'y'. Quando l'esecuzione della funzione di scambio è terminata, il controllo ritorna alla funzione principale. Quando si stampano i valori di 'a' e 'b', nella funzione principale, i risultati saranno i valori originali. Sono 20 per 'a' e 30 per 'b'. Le modifiche apportate utilizzando la funzione di scambio non si riflettono nel programma principale.
Figura 02: Output del programma di scambio
'x' e 'y' all'interno della funzione di scambio hanno i valori scambiati che sono 30 e 20 ma quei valori non possono essere utilizzati nel programma principale. Anche se 'x' e 'y' hanno valori scambiati, sono variabili locali per la funzione di scambio e non sono accessibili dalla funzione principale. Per evitare questo problema, è possibile utilizzare la chiamata per riferimento.
In questo metodo, gli indirizzi delle variabili vengono inviati alla funzione. Fare riferimento al programma C riportato di seguito, scritto utilizzando l'ambiente Code Blocks.
Figura 03: scambio di due numeri usando i puntatori
Secondo l'esempio riportato di seguito, il valore di 'a' è 20 e il valore di 'b' è 30. Invece di passare le copie di 'a' e 'b', il programmatore può inviare gli indirizzi di 'a' e 'b 'usando la funzione, scambia (& a, & b).
Figura 04: Output del programma di scambio usando i puntatori
Nello scambio, la funzione dovrebbe usare i puntatori perché gli indirizzi sono passati e quegli indirizzi dovrebbero essere tenuti da puntatori. All'interno della funzione, l'indirizzo di "a" viene copiato su "x" e l'indirizzo di "b" viene copiato su "y". Usando la variabile temp, i valori 'x' e 'y' sono scambiati. In questa chiamata con il metodo di riferimento, le modifiche all'interno della funzione di scambio si riflettono nel programma principale. La stampa dei valori di 'a' e 'b' nel main darà i valori scambiati. Ora l'output di 'a' è 30 e 'b' è 20. Siccome la funzione sta prendendo l'indirizzo delle variabili, le modifiche apportate all'interno della funzione influenzano i valori originali.
Call By Value vs Call By Reference | |
In call by value, le copie delle variabili vengono passate nella funzione, quindi le modifiche apportate all'interno della funzione non modificheranno il valore originale. | Nella chiamata per riferimento, l'indirizzo delle variabili viene passato alla funzione, quindi le modifiche apportate alle variabili all'interno della funzione modificheranno il valore originale. |
Modifica del valore | |
In call by value, il valore originale non cambia. | Nella chiamata per riferimento, i valori originali stanno cambiando. |
La chiamata per valore e la chiamata per riferimento sono metodi per chiamare la funzione. La differenza tra chiamata per valore e chiamata per riferimento è che nella chiamata per valore le copie delle variabili vengono passate alla funzione e nella chiamata per riferimento, gli indirizzi delle variabili vengono passati alla funzione. L'utilizzo della chiamata per valore o chiamata per riferimento dipende dall'attività da eseguire.
È possibile scaricare la versione PDF di questo articolo e utilizzarlo per scopi offline come da nota di citazione. Si prega di scaricare la versione PDF qui Differenza tra Call by Value e Call by Reference
1. Jaiswal, Haresh. "11 Call by Value vs Call by Reference". Youtube, YouTube, 24 dicembre 2015. Disponibile qui