Tomando decisões no código
Voltando para nosso exemplo de aplicação bancária, queremos permitir um saque somente se o valor a ser retirado for menor ou igual ao saldo da conta, ou seja, se o saldo da conta for maior ou igual ao valor do saque, devemos permitir a operação, do contrário não podemos permitir o saque. Precisamos fazer execução condicional de código.
No C#, podemos executar código condicional utilizando a construção if
:
if (condicao)
{
// Esse código será executado somente se a condição for verdadeira
}
No nosso exemplo, queremos executar a lógica de saque apenas se o saldo for maior ou igual ao valor do saque:
double saldo = 100.0;
double valorSaque = 10.0;
if (saldo >= valorSaque)
{
// código do saque.
}
O código do saque deve diminuir o saldo da conta e mostrar uma mensagem para o usuário indicando que o saque ocorreu com sucesso:
double saldo = 100.0;
double valorSaque = 10.0;
if (saldo >= valorSaque)
{
saldo = saldo - valorSaque;
MessageBox.Show("Saque realizado com sucesso");
}
Repare que, se a conta não tiver saldo suficiente para o saque, o usuário não é avisado. Então estamos na seguinte situação: "Se a conta tiver saldo suficiente, quero fazer o saque, senão, quero mostrar a mensagem Saldo Insuficiente para o usuário". Para fazer isso, podemos usar o else
do C#:
if (saldo >= valorSaque)
{
// código do saque
}
else
{
MessageBox.Show("Saldo Insuficiente");
}
Mais sobre condições
Repare na expressão que passamos para o if
: saldo >= valorSaque
. Nele, utilizamos o operador "maior ou igual". Além dele, existem outros operadores de comparação que podemos utilizar: maior (>), menor (<), menor ou igual (<=), igual (==) e diferente (!=). Podemos também negar uma condição de um if
utilizando o operador !
na frente da condição que será negada.
No capítulo anterior, vimos que um valor tem um tipo associado em C#: 10
é um int
, "mensagem"
é uma string
. Da mesma forma, a expressão saldo >= valorSaque
também tem um tipo associado: o tipo bool
, que pode assumir os valores true
(verdadeiro) ou false
(falso). Podemos inclusive guardar um valor desse tipo numa variável:
bool podeSacar = (saldo >= valorSaque);
Também podemos realizar algumas operações com valores do tipo bool
. Podemos, por exemplo, verificar se duas condições são verdadeiras ao mesmo tempo usando o operador &&
(AND) para fazer um e lógico:
bool realmentePodeSacar = (saldo >= valorSaque) && (valorSaque > 0);
Quando precisamos de um OU lógico, utilizamos o operador ||
:
// essa condição é verdadeira se (saldo >= valorSaque) for true
// ou se (valorSaque > 0) for verdadeiro.
bool realmentePodeSacar = (saldo >= valorSaque) || (valorSaque > 0);
Assim, podemos construir condições mais complexas para um if
. Por exemplo, podemos usar a variável realmentePodeSacar
declarada no if
que verifica se o cliente pode sacar ou não:
if (realmentePodeSacar)
{
// código do saque
}
else
{
MessageBox.Show("Saldo Insuficiente");
}
Exercícios opcionais
Qual é a mensagem e o valor da variável saldo após a execução do seguinte código?
double saldo = 100.0; double valorSaque = 10.0; if (saldo >= valorSaque) { saldo -= valorSaque; MessageBox.Show("Saque realizado com sucesso"); } else { MessageBox.Show("Saldo Insuficiente"); }
mensagem: Saque realizado com sucesso; saldo: 90.0
mensagem: Saldo Insuficiente; saldo 90.0
mensagem: Saque realizado com sucesso; saldo: 100.0
mensagem: Saldo Insuficiente; saldo 100.0
mensagem: Saque realizado com sucesso; saldo: 10.0
Qual é a mensagem e o valor da variável saldo após a execução do seguinte código?
double saldo = 5.0; double valorSaque = 10.0; if (saldo >= valorSaque) { saldo -= valorSaque; MessageBox.Show("Saque realizado com sucesso"); } else { MessageBox.Show("Saldo Insuficiente"); }
mensagem: Saque realizado com sucesso; saldo: -5.0
mensagem: Saldo Insuficiente; saldo -5.0
mensagem: Saque realizado com sucesso; saldo: 5.0
mensagem: Saldo Insuficiente; saldo 5.0
mensagem: Saque realizado com sucesso; saldo: 10.0
Em alguns casos, podemos ter mais de duas decisões possíveis. O banco pode, por exemplo, decidir que contas com saldo menor que R$ 1000 pagam 1% de taxa de manutenção, contas com saldo entre R$ 1000 e R$ 5000 pagam 5% e contas com saldo maior que R$ 5000 pagam 10%.
Para representar esse tipo de situação, podemos usar o
else if
do C#, que funciona em conjunto com oif
que já conhecemos. Veja como ficaria a situação descrita anteriormente:double taxa; if (saldo < 1000) { taxa = 0.01; } else if (saldo <= 5000) { taxa = 0.05; } else { taxa = 0.1; }
O C# vai processar as condições na ordem, até encontrar uma que seja satisfeita. Ou seja, na segunda condição do código, só precisamos verificar que
saldo
é menor ou igual a R$ 5000, pois se o C# chegar nessa condição é porque ele não entrou no primeiroif
, isto é, sabemos que osaldo
é maior ou igual a R$ 1000 nesse ponto.Com base nisso, qual vai ser a mensagem exibida pelo código seguinte?
double saldo = 500.0; if (saldo < 0.0) { MessageBox.Show("Você está no negativo!"); } else if (saldo < 1000000.0) { MessageBox.Show("Você é um bom cliente"); } else { MessageBox.Show("Você é milionário!"); }
"Você está no negativo!"
"Você é um bom cliente"
Nenhuma mensagem
"Você é milionário!"
"Você é um bom cliente", seguida de "Você é milionário!"
Uma pessoa só pode votar em eleições brasileiras se ela for maior que 16 anos e for cidadã brasileira. Crie um programa com duas variáveis,
int idade, bool brasileira
, e faça com que o programa diga se a pessoa está apta a votar ou não, de acordo com os dados nas variáveis.Crie um programa que tenha uma variável
double valorDaNotaFiscal
e, de acordo com esse valor, o imposto deve ser calculado. As regras de cálculo são:- Se o valor for menor ou igual a 999, o imposto deve ser de 2%
- Se o valor estiver entre 1000 e 2999, o imposto deve ser de 2.5%
- Se o valor estiver entre 3000 e 6999, o imposto deve ser de 2.8%
- Se for maior ou igual a 7000, o imposto deve ser de 3%
Imprima o imposto em um MessageBox.
(Desafio)Dado o seguinte código:
int valor = 15; string mensagem = ""; if(valor > 10) { mensagem = "Maior que dez"; } else { mensagem = "Menor que dez; } MessageBox.Show(mensagem);
Existe uma forma de fazer o if desse código uma linha só, sem usar a palavra if e else. Pesquise sobre isso e tente fazer.