quinta-feira, 19 de setembro de 2013

Trabalhando com condições

Neste tópico, veremos como programar condições.
Suponha que um jogador é vencedor se atinge um número mínimo de pontos, e perdedor caso contrário. Sabendo do número de pontos desse jogador, você quer saber se ele é vencedor ou não. Note a palavra chave da frase anterior: "se". É essa palavra que implica uma condição para verificar se um argumento é válido.
Para programarmos o "se", usamos o comando if. Veja o exemplo:
resultado<-c()
pontos<-200
if (pontos>150) resultado<-'vencedor'
resultado
Se você executar esse comando, o valor de resultado será 'vencedor', pois pontos>200 é um argumento verdadeiro. Troque o valor de pontos para 100 e execute, o que aparece? NULL. Isso porquê construímos a variável e não agregamos nenhum valor, ou seja, quando pontos>150 é um argumento falso, não programamos nada para essa situação. Em outras palavras, não demos comandos para quando o jogador é perdedor.
Ficamos com o seguinte pensamento: SE pontos>150, então o jogador é vencedor; SENÃO, o jogador é perdedor. Construímos esse argumento da seguinte forma:
resultado<-c()
pontos<-200
if (pontos>150) {
resultado<-'vencedor';
}else {
resultado<-'perdedor';
}
resultado
Execute o bloco de comandos acima. Como pontos>150 é um argumento verdadeiro, o resultado será 'vencedor'. Agora troque o valor de pontos para 100 e execute. Veja: como pontos>150 é um argumento falso, então o comando dentro do bloco else será executado, ou seja, o resultado será 'perdedor'.
Um outro jeito de fazer o comando if...else... acima, é usar o comando ifelse, como mostro a seguir:
resultado<-c()
pontos<-200
resultado<- ifelse (pontos>150,'vencedor','perdedor')
A estrutura do ifelse é:
ifelse (condição, valor se a condição é verdadeira, valor se a condição é falsa)
Obs: É importante perceber que, usando ifelse, estaremos modificando o valor de uma única variável. Mas se queremos executar um bloco de comandos, essa estrutura não é mais válida. 

Agora imagine que você queira classificar o jogador devido sua pontuação em 'ruim', se o jogador atinge pontuação inferior a 150, 'medio', se atinge entre 150 a 200, e 'bom' se atinge pontuação acima de 200. Então, faremos:
class<-c()
pontos<-200
if (pontos<150) {
class<-'ruim';
}else if(pontos>=150 && pontos <=200){
class<-'médio';
}else {
class<-'bom'
}
class
Note que, na segunda condição usamos o operador lógico &&, que significa 'e', ou seja: se pontos maior ou igual a 150 E pontos menor ou igual a 200.
Poderíamos construir o código acima utilizando o comando ifelse:
class<- ifelse (pontos<150 , 'ruim' , ifelse ( pontos>200 , 'bom' , 'médio ' ) )
Utilizamos o que chamamos de ifelse encaixados ou nested if-else. Isto é, uma condição de um ifelse depende do resultado da condição de outro ifelse.
Temos que concordar que o código fica mais 'enxuto' (com menos linhas), mas quando você tem mais de duas condições, imagine o trabalho que dará programar essas condições com ifelse. E também pelo fato de que ifelse não se aplica para bloco de operações, usaremos sempre (tirando raras exceções) a estrutura if... else...

Nenhum comentário:

Postar um comentário