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
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top