Sintassi: & # 8220; Esci da Sub & # 8221; oppure & # 8220; Restituisci & # 8221; nelle subroutine VB.NET

StackOverflow https://stackoverflow.com/questions/1004657

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
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top