Sintassi: & # 8220; Esci da Sub & # 8221; oppure & # 8220; Restituisci & # 8221; nelle subroutine VB.NET
-
05-07-2019 - |
Domanda
Entrambi " Exit Sub " o " Return " sembra realizzare la stessa cosa: uscire da una subroutine. C'è qualche differenza nel modo in cui lavorano sotto le coperte?
Cioè,
Private Sub exitNow()
Exit Sub
End Sub
o
Private Sub exitNow()
Return
End Sub
Soluzione
Dal documento:
In una procedura Sub o Set, l'istruzione Return equivale a un'istruzione Exit Sub o Exit Property e l'espressione non deve essere fornita.
Quindi sono gli stessi in questo contesto.
Altri suggerimenti
Tendo a preferire Return
su Exit Sub
. Perché di tanto in tanto si passa da Sottotitoli
a Funzione
. In questo caso Exit Sub
potrebbe essere convertito in Exit Function
, ma questo presuppone che ci fosse una precedente assegnazione al nome della funzione (come VB 6), che molto probabilmente non non succede. Return
rileverà questa situazione: se il metodo restituisce un valore, Return
senza argomenti fallirà al momento della compilazione.
Se si controlla l'output IL delle 2 istruzioni, sono uguali. Tuttavia, poiché & # 8217; restituisce & # 8217; è pensato per rimandare qualcosa al chiamante, quindi in senso stretto, & # 8216; Exit Sub & # 8217; è più adatto per l'utilizzo in un Sub.
Sono gli stessi in questo contesto.
Tuttavia, dal punto di vista della leggibilità del codice, " Exit Sub " sarebbe più chiaro poiché il "Reso" indica che qualcosa come valore viene utilizzato come output (che non è il caso delle routine secondarie).
- Prima di tutto, Procedures viene fornito con sub, dovremmo sapere che stiamo lavorando su procedure specifiche che non restituiscono un valore specifico con la possibilità di passare alcuni parametri specifici o anche senza passare alcun parametro. Come:
- Stampa qualcosa ().
- Calcola il fattoriale del numero intero
CalcFact (X)
. -
Esegui alcuni processi per un'attività specifica.
-
La funzione è un processo specifico programmato per realizzare un'attività specifica passando anche alcuni parametri specifici e deve restituire un valore che può essere utilizzato per completare l'attività complessiva, come la convalida del nome utente e dell'utente passare.
In breve Sub non restituisce valore e lo chiamiamo direttamente " Print HelloWorld () "
, mentre le funzioni fanno come:
-
ValidUsersNameAndPass (" Johne ", " jOhNe13042019 ")
'Questo potrebbe restituire un valore booleano. -
ValidUsersNameAndPass (" Johne ", " jOhNe13042019 ");
// Questo potrebbe restituire un valore booleano.
Sebbene esistano eccezioni come le clausole di guardia, nella maggior parte dei casi considererei un segno che il metodo è troppo lungo.
Volevo confermare che agiscono allo stesso modo anche nelle espressioni lambda, e lo fanno:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub