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: 9043
Loops com for/foreach
Os loops com for ou foreach diferenciam-se dos loops com while ou until por conterem uma condição fixa de término. Estas alças são adequadas nos casos em que o "valor inicial" e o "valor final" são previamente determinados. Exemplo 1:
Exemplo 2:
Exemplo 3:
Um loop-for começa com a palavra chave for. A seguir, entre parênteses, é formulada a condição de execução da alça. Nos loops-for clássicos, de acordo com a linguagem C, no corpo das alças são anotadas três diretivas. Na primeira, um contador é definido e inicializado. No exemplo 1, o contador $i é definido e inicializado com o valor 0. A segunda diretiva contém a condição de finalização da alça. Para formular a condição, os operadores relacionais fazem-se necessários. Na terceira diretiva, o contador do loop é modificado de forma que, em algum momento, ele preencha a condição exigida pela segunda diretiva. No exemplo, $i é incrementado em 1 a cada passagem, de modo que o valor, em algum momento, será maior do que 255 e atenderá à condição de finalização. O exemplo 1 utiliza o contador para, a cada passagem, apresentar em notação hexadecimal o valor atual de $i. A condição if($i % 8 == 0) é o módulo da divisão que, quando for zero, força uma quebra de linha. A apresentação dos valores é obtida com a ajuda da função printf (a mesma da linguagem C) que permite uma saída limpa de dados formatados. Esta função, aliás, não é muito adequada para a CGI, ou seja, para saídas em forma de HTML.
O exemplo 2 mostra um caso especial, típico da Perl, da utilização de um loop-for. Esta forma é muito prática para processar sequencialmente os elementos de um array ou lista hash. No exemplo 2 foi criada uma lista @Alfabeto contendo todas as letras maiúsculas do alfabeto. Com a diretiva for(@Alfabeto) é colocada uma alça sobre esta matriz. A alça será automaticamente repetida tantas vezes quantos forem os elementos da matriz. Para obter o elemento atual da lista, é utilizada a variável predefinida $_, a qual guarda o conteúdo da mesma.
Uma outra construção típica em Perl é uma alça com foreach. O exemplo 3 mostra um destes loops em ação. Neste tipo de loop define-se como condição entre parênteses uma área única, por exemplo números (do Número..até Número) ou letras (da Letra..até Letra). A alça é automaticamente repetida até que todos os elementos da área definida tenham sido processados.
Se quisermos inserir um contador no interior do loop, pode-se definir uma variável contadora entre o foreach e a condição de execução da alça, assim como no exemplo 3 a escalar $i.
O exemplo 3 dá todos os números, entre 1 e 100, que sejam ímpares e divisíveis por 3. O camando de salto next auxilia o processamento.
Comandos de Salto em Perl
A linguagem Perl tem a fama de que, com ela, não é possível fazer uma programação bem estruturada. Apesar da Perl oferecer atualmente todas as possibilidades para uma programação de estrutura limpa e até para a programação orientada a objeto (OOP), ela é e continuará sendo uma linguagem para scripts onde os programadores frequentemente não se dão ao trabalho de distribuir o fluxo do programa em subrotinas específicas. Uma alternativa utilizada frequentemente numa programação estruturada são os comandos de salto para um outro ponto desejado no programa. Também no interior de loops, os comandos de salto são muito apreciados para, por exemplo, forçar uma passagem prematura pelo loop ou para interrompê-lo. Exemplo 1:
Exemplo 2:
Os seguintes comandos de salto estão à disposição em Perl:
goto (go to = vá para) salta para uma outra parte desejada do programa. Para tanto, a referida parte precisa ser identificada por uma "Label" (label = etiqueta) que pode ser comparada à âncora do HTML. Uma label é definida por um nome seguido de dois pontos. No exemplo acima, na penúltima linha, foi definida a label Resultado:. O comando goto, no início do exemplo, força um salto para esta label. É o chamado salto incondicional.
redo (redo = refazer) foi projetado para ser utilizado no interior de laços. A passagem atual pelo laço é interrompida. A próxima passagem é iniciada sem que a condição de execução do loop seja avaliada. Se, por exemplo, o loop tiver um contador que é incrementado, o redo refaz a passagem pelo loop sem alterar o valor do contador.
next (next = próximo) também é para ser utilizado no interior de loops. A passagem atual é interrompida e a próxima passagem é iniciada após a avaliação da condição de execução do loop.
last (last = último) interrompe imediatamente um loop.
continue é um caso especial em Perl e deve ser tratado de forma diferente que em outras linguagens. O exemplo 2 mostra uma aplicação típica. continue inicializa um bloco de diretivas próprio, da mesma forma que o loops. No interior deste bloco que, como habitual, é demarcado pelas chaves { e }, podem ser anotadas as diretivas desejadas. Se um bloco continue estiver logo após um bloco de loop, ele também é repassado a cada passagem pelo loop. Com um comando de salto como redo no interior do bloco da alça, é possível evitar que o bloco continue sendo processado. No exemplo 2, esta construção tem como objetivo que todos os números pares entre 1 e 10 sejam mostrados.
- << Anterior
- Próximo