Olá pessoal, neste post irei falar sobre as funções condicionais que a linguagem AutoLisp possui. Estas funções são bem importantes em linguagens de programação, para quem não sabe, com as funções condicionais, podemos fazer com que um trecho de código seja ou não executado. Neste post, eu irei falar dos comandos condicionais IF e COND.
- IF (SE)
O comando condicional if, avalia uma expressão booleana, que ao ser verdadeira permite a execução de um determinado trecho de código. Este comando pode ter um "SENÃO", ou seja, se a expressão booleana não for verdadeira, é executado um trecho de código diferente do trecho que foi atribuído a ser executado quando verdadeiro. O trecho de código que deve ser executado quando se avalia o if, deve estar dentro do parentes do if, assim a sintaxe do comando if é a seguinte:
(if (EXPRESSÃO BOOLEANA)
(COMANDO A SER EXECUTADO, QUANDO A EXPRESSÃO BOOLEANA É VERDADEIRA)
(COMANDO A SER EXECUTADO, QUANDO A EXPRESSÃO BOOLEANA É FALSA)
)
A sintaxe apresentada acima, executa apenas um comando se a expressão for verdadeira, e apenas um comando se ela for falsa. Se o programador quiser, que seja executado mais de um comando, é necessário utilizar de um "truque" que é a utilização da expressão progn. Abaixo, podemos ver a sintaxe do comando if mesclado com o progn:
(if (EXPRESSÃO BOOLEANA)
(progn
(COMANDO 1 - EXPRESSÃO BOOLEANA É VERDADEIRA)
(COMANDO 2 - EXPRESSÃO BOOLEANA É VERDADEIRA)
(COMANDO 3 - EXPRESSÃO BOOLEANA É VERDADEIRA)
...
(COMANDO N - EXPRESSÃO BOOLEANA É VERDADEIRA)
)
(progn
(COMANDO 1 - EXPRESSÃO BOOLEANA É FALSA)
(COMANDO 2 - EXPRESSÃO BOOLEANA É FALSA )
(COMANDO 3 - EXPRESSÃO BOOLEANA É FALSA )
...
(COMANDO N - EXPRESSÃO BOOLEANA É FALSA )
)
)
Exemplos:
- (if T (setq x 10) (setq x 20)) , a variável x, sempre receberá o valor 10, pois a expressão sempre é verdadeira.
- (if (= teste 0) (setq x 10)) , se a variável teste for igual a 0, então a variável x receberá o valor 10, caso contrário, nada é executado.
- (if (= teste 0) (setq x 10) (setq x 20)) , se a variável teste for igual a 0, então a variável x receberá o valor 10, caso contrário, receberá o valor 20.
- (if (= teste 0) (progn (setq x 10) (setq y 5)) (setq x 20)) , se a variável teste for igual a 0, então a variável x receberá o valor 10 e a variável y o valor 5, caso contrário, x receberá o valor 20.
- (if (= teste 0) (progn (setq x 10) (setq y 5)) (progn (setq x 20) (setq y 5))) , se a variável teste for igual a 0, então a variável x receberá o valor 10 e a variável y o valor 5, caso contrário, x receberá o valor 20 e y o 5.
- COND
O comando condicional cond, testa uma série de expressões, e executa a primeira que for verdadeira. Este comando é muito parecido com o switch de algumas linguagens de programação como C++. A sintaxe em autolisp para utilizar o comando cond é a seguinte:
(cond ((EXPRESSÃO BOOLEANA 1) (COMANDOS 1))
((EXPRESSÃO BOOLEANA 2) (COMANDOS 2))
((EXPRESSÃO BOOLEANA 3) (COMANDOS 3))
...
((EXPRESSÃO BOOLEANA N) (COMANDOS N))
(T (COMANDOS DEFAULT))
)
Pela sintaxe acima, primeiro é verificado a expressão boolena 1, se ela for verdadeira é executado somente os comandos contidos em "comandos 1". Se ela for falsa, então o fluxo do programa avalia a expressão booleana 2 da mesma forma, se ela for verdadeira é executado somente os comandos contidos em "comandos 2", e se for falsa, passa para a próxima expressão boolena se esta existir.
A última linha mostrada na sintaxe " (T (COMANDOS DEFAULT)) ", mostra uma forma de criar uma expressão opcional do cond, caso o programador precise de um comando padrão (default), que será executado sempre que todas as expressões booleanas anteriores forem falsas.
Exemplos:
- É declarado a variável numero com o valor 3. Em seguida verifica-se se o número é igual a zero, maior que zero ou menor do que zero através da função cond. Neste exemplo não foi utilizado um comando default. (obs: o comando princ imprime uma string na linha de comando do autocad):
(setq numero 3)
(cond ((= numero 0) (princ "O número é 0"))
((> numero 0) (princ "O número é maior do que 0"))
((< numero 0) (princ "O número é menor do que 0"))
)
No exemplo acima, será executado a segunda expressão boolena, pois a variável numero é maior do que zero, assim é impresso na linha de comando que o número é maior do que 0.
- No exemplo abaixo, é declarado a variável estado com a string "Bahia", em seguida através da função cond é verificado se uma das expressões é verdadeira, caso alguma seja, é executado os comandos referentes a expressão que for verdadeira:
(setq estado "Bahia")
(cond ((= estado "Minas Gerais")
(setq ddd 31)
(setq capital "Belo Horizonte")
)
((= estado "São Paulo")
(setq ddd 11)
(setq capital "São Paulo")
)
((= estado "Rio de Janeiro")
(setq ddd 21)
(setq capital "Rio de Janeiro")
)
(T
(princ "Estado não cadastrado!")
)
)
No exemplo acima, será executado a última expressão, que é a default, pois nenhuma das expressão avaliadas anteriormente é verdadeira.
No próximo post, eu irei falar sobre as funções de repetição. Até lá, pessoal!
Nenhum comentário:
Postar um comentário