Sintaxe: “Sub Exit” ou “Return” em VB.NET sub-rotinas
-
05-07-2019 - |
Pergunta
Tanto "Sub Exit" ou "Return" parecem fazer a mesma coisa - saída de uma sub-rotina. Existe alguma diferença na forma como eles trabalham sob as tampas?
Isto é,
Private Sub exitNow()
Exit Sub
End Sub
ou
Private Sub exitNow()
Return
End Sub
Solução
From the doc:
Em um procedimento Sub ou Set, a instrução de retorno é equivalente a um Exit Sub ou instrução Exit Property, e de expressão não deve ser fornecido.
Então, eles estão do mesmo neste contexto.
Outras dicas
I tendem a preferir Return
sobre Exit Sub
. Porque de vez em quando você muda de Sub
para Function
. Neste caso Exit Sub
poderia ser convertido para Exit Function
, mas isso pressupõe que houve uma atribuição anterior para o nome da função (VB iguais 6), que muito provavelmente não aconteceu. Return
iria pegar essa situação -. se o método deve retornar um valor, Return
com nenhum argumento irá falhar em tempo de compilação
Se você inspecionar a saída IL dos 2 declarações, eles são os mesmos. No entanto, uma vez que ‘retorno’ é destinado a empurrar algo de volta para o chamador, de modo estritamente falando, ‘Sub Exit’ é mais adequado para uso em uma Sub.
Eles são os mesmos neste contexto.
No entanto, do ponto legibilidade do código de vista, "Exit Sub" seria mais clara desde o "Return" indica que algo algum valor está sendo usado como uma saída (o que não é o caso com sub-rotinas).
- Em primeiro lugar, Procedimentos vem com sub, devemos saber que estamos trabalhando em procedimentos específicos que não retornam um valor específico com a capacidade de passar alguns parâmetros específicos ou mesmo sem passar qualquer parâmetro. Tais como:
- Imprimir alguma coisa ().
- Calcular o fatorial de número inteiro
CalcFact(X)
. -
Faça alguns processos para uma tarefa específica.
-
Função é um processo específico programado para alcançar uma tarefa específica por também passar alguns parâmetros específicos, e tem que retornar algum valor que pode ser usada para completar a tarefa global, tais como a validação do nome de usuário e de usuário passar.
Em suma Sub Não retorna valor e nós chamá-lo diretamente "Print HelloWorld()"
, enquanto funções fazer, como:
-
ValidUsersNameAndPass("Johne","jOhNe13042019")
'Isso poderia retornar um valor booleano. -
ValidUsersNameAndPass("Johne","jOhNe13042019");
// Isso pode retornar um valor booleano.
Embora existam exceções, como cláusulas de guarda, na maioria dos casos eu consideraria seja um sinal de que o método é muito longo.
Eu queria confirmar que eles agem da mesma em expressões lambda também, e eles fazem:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub