sexta-feira, 1 de junho de 2012

6 - Funções de repetição

Olá pessoal, neste post irei falar sobre as funções de repetição da linguagem AutoLisp. A partir dos comandos de repetição podemos fazer com que um determinado trecho de código possa ser repetido. Neste post, eu irei falar dos comandos de repetição WHILE e REPEAT.


- while

O comando de repetição while do AutoLisp permite que um trecho de código seja repetido (loop), enquanto uma expressão lógica for verdadeira. Se esta expressão nunca se tornar falsa, o programa entra no que chamamos em programação de "Loop Infinito", ou seja, um trecho de código será repetido infinitamente. Assim o programador deve estabelecer dentro do trecho a ser repetido, algum mecanismo que torne em algum momento, falso o resultado da expressão avaliada pelo while.
A sintaxe do comando while é a seguinte:

(while (EXPRESSÃO BOOLEANA)
          (COMANDO 1)
          (COMANDO 2)
          (COMANDO 3)
          ...
          (COMANDO N)
)


Exemplos:

- O exemplo abaixo, mostra um loop que nunca será feito, pois a expressão booleana avaliada pelo while, possui sempre o valor nil (falso). Assim, o comando  (princ "loop"), nunca será executado.

(while nil
          (princ "loop")
)


- No exemplo abaixo, é declarado uma variável chamada contador com o valor 0. Em seguida a função while avalia a expressão booleana (< contador 5). Assim, enquanto o valor da variável contador for menor do que 5, o comando que incrementa uma unidade na variável contador é executado:  (setq contador (+ contador 1)).
Quando a variável atingir o valor 5, a expressão booleana irá retornar falso, e o fluxo de execução do programa, sairá do loop.

(setq contador 0)
(while (< contador 5)
          (setq contador (+ contador 1))
)

O loop acima, será executado cinco vezes, parando quando a variável contador atingir o valor 5 e for avaliado pela expressão booleana.


- No exemplo abaixo, é declarado uma variável chamada repetir com o valor T. Em seguida a função while avalia a expressão booleana, que no caso, é verdadeiro (contéudo da variável repetir), assim a função executa os três comandos declarados dentro do while.
O terceiro comando executado de dentro do while, declara a variável repetir como nil, assim, logo em seguida, quando o comando while avalia a expressão boolena novamente, esta retornará falso, o que faz com que o fluxo de execução do programa saia do while.

(setq repetir T)
(while repetir
          (print "linha1")
          (print "linha2")
          (setq repetir nil)
)

O loop acima, será executado apena uma vez, pois após a primeira iteração do loop, a variável repetir assume o valor falso (nil).




- repeat

O comando repeat é bem simples, com ele é possível executar um trecho de código por uma quantidade estabelecida de vezes. A sintaxe do comando repeat é a seguinte:


(repeat INTEIRO
            (COMANDO 1)
            (COMANDO 2)
            (COMANDO 3)
             ...
            (COMANDO N)

)


Na sintaxe acima, o campo INTEIRO deve ser um número inteiro positivo e diferente de zero para que a função repeat execute a sua sequencia de comandos.


Exemplos:

- O código abaixo, repete por duas vezes o comando print, com isto é impresso por duas vezes a palavra "oi" na linha de comando do autocad:

(repeat 2
            (print "oi")
)


- O código abaixo, estabelece inicialmente algumas variáveis, e em seguida é repetido o código contido na função repeat, por dez vezes, o que faz com que as variáveis valor1 e valor2 tenham seus valores modicados a cada passada.

(setq valor1 0)
(setq valor2 0)
(setq quantidade 10)
(repeat quantidade
             (setq valor1 (+ valor1 1))
             (setq valor2 (- valor2 1))
)


Pessoal, isto é tudo! No próximo post, irei falar sobre como declarar funções em AutoLisp, e como criar funções que podem ser usadas para criar comandos no AutoCAD. Funções são usadas para criar os programas em AutoLisp e podem ser salvas e executadas posteriormente pelo usuário.