Informática Numaboa - Tutoriais e Programação
Linguagem Perl - Loops e Saltos
Qui 20 Nov 2008 20:47 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Quinta, 20 Novembro 2008 21:53
- Autor: vovó Vicki
- Acessos: 9085
Loops são alças, mas não adianta querer dourar a pílula. Ninguém vai saber do que eu estou falando se eu quiser chamar um loop de alça
Neste tutorial você vai aprender como se criam diversos tipos de loops. Também vai tomar contato com os saltos condicionais (curioso, ainda não encontrei ninguém que tenha trocado o termo salto por jump).
Loops com while e until
Com a ajuda dos loops while da linguagem Perl pode-se repetir diretivas do programa enquanto a condição da loop for verdadeira. Com um loop until pode-se repetir diretivas do programa até que a condição do loop seja atendida. Exemplo 1:
Exemplo 2:
Um loop while (como o do exemplo 1) é iniciado com a palavra while (while = enquanto). Seguem-se as diretivas, contidas entre chaves. Para se formular uma condição é fundamental que as regras dos operadores de comparação sejam observadas. O conteúdo do loop é repetido enquanto a condição do loop for verdadeira.
Um loop until (como na segunda parte do exemplo 1) inicia-se com a palavra until (until = até que). Trata-se de uma formulação lógica diferente da do loop while. O conteúdo do loop until é repetido até que a condição do loop seja verdadeira. Nos demais aspectos, as regras do loop until são as mesmas que as do loop while. Entretanto, observe cuidadosamente a formulação da condição lógica! No exemplo, a condição while($i <= 10) acaba tendo exatamente o mesmo efeito que until($i > 10).
O exemplo 2 mostra um caso de aplicação típico do loop while em Perl. Neste exemplo, um arquivo é lido linha por linha. Trata-se de um arquivo de log, do tipo que os servidores web produzem para controlar os acessos. Neste caso específico, não há a necessidade de se usar um operador relacional (de comparação) na formulação da condição do loop. O loop é automaticamente interrompido quando todas as linhas do arquivo tiverem sido lidas (complemente esse exemplo verificando o módulo Leitura e Escrita de Arquivos, como também as expressões regulares na pesquisa em cadeias de caracteres).
As diretivas no interior de um loop sempre devem estar contidas entre chaves, mesmo quando houver apenas uma única diretiva.
Observação: Em loops com operadores condicionais na condição do loop, deve-se sempre garantir pelo menos uma possibilidade de saída após o processamento apropriado. Isto significa que todas as condições devem ser verificadas cuidadosamente e que, com certeza, exista pelo menos uma saída válida, seja qual for o caso. Loops em que determinada condição não tenha uma saída prevista podem entrar no chamado "loop infinito" e o programa ou o sistema "travam".
Para se evitar um "loop infinito" é necessário que exista algo que, a um momento qualquer, leve à saída da alça. Para esse fim, frequentemente são definidos os chamados "contadores" - como no exemplo 1 a escalar $i. Esta escalar recebe um valor inicial de 1, que é incrementado em 1 a cada passagem através da diretiva $i++;. Desta forma, quando atingir um determinado valor e atender a condição do loop, este é interrompido.
Uma outra possibilidade de controlar e interromper loops é oferecida pelos saltos condicionais.
Loops com do..while/until
Neste tipo de loop, ao invés de primeiramente avaliar a condição da alça para depois executar o código dependente da condição, primeiro o bloco de diretivas é executado para depois a condição ser avaliada. Este tipo de loop, em todos os casos e independentemente do tipo de condição, é executado pelo menos uma vez. O uso deste tipo de loop é interessante quando as variáveis utilizadas na condição dependem de um processamento anterior. Exemplo 1:
Exemplo 2:
Um loop deste tipo começa com a palavra chave do. O bloco de diretivas vem logo a seguir, como sempre, entre chaves { }. Após a chave de fechamento }, encontra-se a condição de execução da alça. A condição pode ser formulada com while (enquanto) ou com until (até que). As regras restantes são as mesmas das alças com while/until.
Observação: Os loops com do..while/until também sempre precisam ter uma opção de saída para não entrarem num "loop infinito". Os dois exemplos acima apresentam o mesmo resultado, ou seja, mostram o nome "João". Os exemplos diferem apenas na formulação da condição de execução da alça. Se os operadores relacionais eq (igual) e ne (não igual) fossem trocados, os dois loops entrariam num "loop infinito".
- Anterior
- Próximo >>