2015-08-17 8 views
6

Sto semplicemente esaminando il codice base al lavoro, cercando di cancellare gli avvisi generati durante la compilazione e ci sono un sacco di avvisi "Funzione senza clausola, clausola".C'è qualche differenza tra l'utilizzo di un'istruzione Return rispetto all'assegnazione di un valore alla funzione?

Mentre andando indietro e cambiare la maggior parte di questi ad essere un Sub invece di un Function, io di tanto in tanto si affacciano su una dichiarazione Return perché ho appena evidenziare il nome del metodo e cercare un valore assegnato ad esso, che è come si fa nella maggior parte del codice.

Così mi stavo chiedendo se c'è qualche differenza tra questi:

Private Function Foo() As String 
    Foo = String.Empty 
End Function 

Oppure:

Private Function Foo() As String 
    Return String.Empty 
End Function 

punto di vista funzionale, sembra essere identico, ma non ero sicuro se ci fosse dietro le differenze tra le scene riguardo al modo in cui il compilatore interpreta questo.

risposta

6

La differenza principale è che Return esce dalla funzione mentre non assegna un valore al nome della funzione. Così i due equivalenti dovrebbero essere

Private Function Foo() As String 
    Foo = String.Empty 
    Exit Function 
    '..... 
End Function 

Oppure:

Private Function Foo() As String 
    Return String.Empty 
    '..... 
End Function 
+0

Oh, abbastanza giusto sì.So che 'return' esiste immediatamente, non ero sicuro se ci fosse qualcos'altro che succedeva dietro le quinte con come sono gestite le variabili o qualcosa di quella natura. – sab669

3

Non c'è alcuna differenza significativa.

Tuttavia, preferisco usare Return <variable> in quanto è molto più chiaro in termini di leggibilità del codice. Certo che è una preferenza personale.

Considera anche la possibilità di passare su un'altra variabile con lo stesso nome.

3

Per quanto riguarda le dichiarazioni di controllo del flusso andare, non sono necessariamente identici , anche se i due esempi riportati si comporterebbero in modo identico.

Quando si esegue questa operazione:

Return String.Empty 

Le uscite di funzione e il risultato della funzione è il valore fornito. Quando si esegue questa operazione:

Foo = String.Empty 

Il risultato della funzione è il valore fornito, ma la funzione non uscita. Si può fare qualcosa di simile:

Foo = String.Empty 
' other logic 
Foo = someValue 

Se la funzione è uscito da qualche parte in other logic, come ad esempio da un Exit Function dichiarazione, allora il suo risultato sarebbe stato String.Empty dato che era l'ultimo valore impostato come il risultato. Se così non fosse, il suo risultato sarebbe someValue perché che sarebbe l'ultimo valore impostato come risultato.

Sono utilizzati per scopi simili, restituendo valori dalla funzione. Ma il flusso (e la successiva leggibilità) del codice può essere molto diverso a seconda di come vengono utilizzati.