OS MELHORES VÍDEOS

 

Pesquisar

segunda-feira, 20 de janeiro de 2014

Saindo do controle de fluxo - comando Exit

O que é?

A instrução Exit sai de um bloco de código Do…LoopFor...NextFunctionSub ou Property.



>Estrutura:

  • Exit Do
Fornece um meio de sair de uma instrução Do...Loop. Pode ser usada somente dentro de uma instrução Do...Loop.Exit Do transfere o controle para a instrução seguinte à instrução Loop. Quando usada dentro de instruçõesDo...Loop aninhadas, Exit Do transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit Do.
  • Exit For
Fornece um meio de sair de um loop For. Pode ser usada somente em um loop For...Next ou For Each...NextExit For transfere o controle para a instrução seguinte à instrução Next. Quando usada dentro de loops For aninhados,Exit For transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit For.
  • Exit Function
Sai imediatamente do procedimento Function em que aparece. A execução continua com a instrução seguinte à instrução que chamou Function.
  • Exit Property
Sai imediatamente do procedimento Property em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Property.
  • Exit Sub
Sai imediatamente do procedimento Sub em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Sub.

Exemplo

Um exemplo útil para o uso das instruções Exit é no caso de um loop For...Next. Supondo que estivéssemos buscando um determinado valor dentro de uma coleção de itens de 10 posições. A alternativa mais comum é verificar a lista item a item comparando-os até que encontrar o item que se deseja. Caso o item estivesse na 10º posição, não haveria tanto problemas. Mas se ele estivesse na 2º posição, porque continuar o executando o código até a 10º posição se já achamos o item?
Veja o código abaixo:
O código declara uma matriz de tamanho 10 com nomes de pessoas e todas as suas posições. Passando um nome por parâmetro, a função retorna VERDADEIRO se o nome existir na lista e FALSO caso contrário. A matriz é preenchida entre as linhas 7 e 16 e a busca é feita em uma laço For...Next nas linhas 18 a 23.
A variável quantInteracoes foi criada para verificar quantas vezes o laço For...Next do código faz interações, esta quantidade é mostrada numa caixa de mensagem na linha 25.
Para testar a função, em qualquer célula de sua planilha e digite =ProcuraNome("João"). Veja que a função retorna o valor VERDADEIRO, o que significa que o nome consta na lista. Se informar qualquer outro nome, por exemplo, "Sérgio", a função retornará FALSO. Note que independente do nome informado, exista ele ou não na lista, uma caixa de mensagem com a quantidade 10 sempre. Isso significa que, mesmo que o laço encontre o nome na primeira posição, ele continua executando o laço até a última posição. Se a lista contivesse 1000 nomes, o código ficaria muito demorado.
Mas como apenas queremos saber se o nome existe na lista, não há necessidade de continuar executando o laço quanto a condição da linha 20 for atendida. Então, veja a modificação feita no código:
Adicionando a cláusula Exit For como feito no código acima, ao atender a condição da linha 20, o código sairá do laço For...Next e continuará a execução na linha 24. Depois de fazer a modificação, em qualquer célula de sua planilha digite: =ProcuraNome("João"). Veja que ao invés do valor 10, a caixa de mensagem mostrará 1. Se colocar =ProcuraNome("Maria"), a caixa de mensagem apresentará 2 e assim por diante.
Além de evitarmos trabalho desnecessário, aumentamos a performance da função para a maior parte dos casos em que ela for utilizada.

Comentários

Não confunda instruções Exit com instruções EndExit não define o fim de uma estrutura.
Como a instrução Exit desvia a execução do código, é aconselhável usá-la somente se o código da função estiver bem estruturado, principalmente para os casos de Function e Sub.

Nenhum comentário:

Postar um comentário