Página Inicial Nível 1 Nível 2 Nível 3 Nível 4 Nível 5 Nível 6 Perguntas Lista de Exercícios

Condicionais

Como funcionam as condicionais em C#

Tratando Entradas Inválidas

Supondo que nosso incrível usuário, com toda sua maestria executa nossa aplicação e faz isso

Qual o nome da sua banda?
Metallica
Quantos integrantes ela possui?
Quatro

Saída

Qual o nome da sua banda?
Metallica
Quantos integrantes ela possui?
Quatro

Unhandled Exception: System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at AppCSharp.Program.Main(String[] args) in /path/to/AppCSharp/Program.cs:line 13

O sistema estava esperando um número não uma string!!!

...
static void Main(string[] args)
{
    Console.WriteLine("Qual o nome da sua banda?");
    string nome = Console.ReadLine();
    Console.WriteLine("Quantos integrantes ela possui?");
    // Exceção ocorreu nesse ponto
    int numeroMembros = int.Parse(Console.ReadLine());
    Console.WriteLine(nome + " possui " + numeroMembros +" membros.");
}
...

Para resolver podemos utilizar o método int.TryParse(), da seguinte forma

...
static void Main(string[] args)
{
    Console.WriteLine("Qual o nome da sua banda?");
    string nome = Console.ReadLine();
    Console.WriteLine("Quantos integrantes ela possui?");
    int numeroMembros = 0;
    int.TryParse(Console.ReadLine(), out numeroMembros);
    Console.WriteLine(nome + " possui " + numeroMembros +" membros.");
}
...

Nesse momento queremos mudar o comportamento da aplicação caseo não consiga realizar a conversão

Para o nosso exemplo podemos utilizar o comando condicional if

if (pronto)
{
    FaçaCasoTrue();
}

ExecuteSempre();

No caso da variável pronto esteja com o valor true teremos a seguinte execução

FaçaCasoTrue();
ExecuteSempre();

No caso da variável pronto esteja com o valor false teremos a seguinte execução

ExecuteSempre();

Já que nosso método int.TryParse retorna um bool podemos escrever dessa forma

...
static void Main(string[] args)
{
    Console.WriteLine("Qual o nome da sua banda?");
    string nome = Console.ReadLine();
    Console.WriteLine("Quantos integrantes ela possui?");
    int numeroMembros = 0;
    if (int.TryParse(Console.ReadLine(), out numeroMembros))
    {

    }
    Console.WriteLine(nome + " possui " + numeroMembros +" membros.");
}
...

Para, talvez, termos um código mais claro podemos inverter o valor do retorno do método int.TryParse()

...
static void Main(string[] args)
{
    Console.WriteLine("Qual o nome da sua banda?");
    string nome = Console.ReadLine();
    Console.WriteLine("Quantos integrantes ela possui?");
    int numeroMembros = 0;
    if (!int.TryParse(Console.ReadLine(), out numeroMembros))
    {
        Console.WriteLine("Entrada não é válida");
        // O zero indica que a aplicação finalizará tendo sida executada com sucesso
        Environment.Exit(0);
    }
    Console.WriteLine(nome + " possui " + numeroMembros +" membros.");
}
...
Qual o nome da sua banda?
Metallica
Quantos integrantes ela possui?
Quatro

Saída

Qual o nome da sua banda?
Metallica
Quantos integrantes ela possui?
Quatro
Entrada não é válida

Expressões

Muitas vezes precisamos realizar comparações.

Exemplos

Temos apenas um membro na banda?

numeroMembros = 1;
numeroMembros == 1 // return true

Temos algum membro na banda?

numeroMembros = 0;
numeroMembros > 0 // return true

A banda não é o Metallica?

nome = "Megadeth";
nome != "Metallica" // return true

Else

Quando queremos tratar o valor contrário da nossa condição utilizamos o bloco de código chamado else

if (pronto)
{
    FaçaSeTrue();
}
else
{
    FaçaSeFalse();
}

Else If

Quando queremos tratar diversas condições utilizamos o bloco de código chamado else if

if (pronto)
{
    FaçaSeTrue();
}
else if (nome == "Metallica")
{
    FaçaSeFalseBandaMetallica();
}
else
{
    FaçaSeFalseBandaNaoMetallica();
}

Utilizando as condições podemos declarar o tipo de banda que irá se apresentar

Quando temos apenas um comando os parênteses são desnecessários, porém recomendo sempre utilizar

...
int numeroMembros = 0;
int.TryParse(Console.ReadLine(), out numeroMembros);

if (numeroMembros < 1)
{
    Console.WriteLine("A banda tem que ser composta por pelo menos 1 membro");
    Environment.Exit(0);
}
else if (numeroMembros == 1)
    Console.WriteLine(nome + " é uma monobanda :D");
else if (numeroMembros == 2)
    Console.WriteLine(nome + " é uma dupla");
else
    Console.WriteLine(nome + " possui " + numeroMembros +" membros.");
...

Executando a aplicação

Nossa aplicação está um pouco mais inteligente.

Adicionamos duas funcionalidades:

Qual o nome da sua banda?
Metallica
Quantos integrantes ela possui?
4
Metallica possui 4 membros.
Qual o nome da sua banda?
The White Stripes
Quantos integrantes ela possui?
2
The White Stripes é uma dupla
Qual o nome da sua banda?
Rob Zombie
Quantos integrantes ela possui?
1
Rob Zombie é uma monobanda :D

Recapitulando

Utilizando condições e expressões conseguimos mudar o fluxo de execução

if

O bloco de código if somente é executado se a condição for true

else

O bloco de código else somente é executado se a condição o bloco if for false

expressões


Página Inicial Nível 1 Nível 2 Nível 3 Nível 4 Nível 5 Nível 6 Perguntas Lista de Exercícios