If else em C++: estruturas condicionais de controle

If else em C++ - homem ao lado de duas placas, uma onde se lê true e a outra false.

O que é o if else em C++?

O if else em C++ é uma estrutura condicional de controle que permite executar (ou saltar) um bloco de código apenas quando uma expressão for verdadeira, e também executar outros blocos de código se a expressão for falsa. Na realidade, para ser mais preciso, o if é uma estrutura condicional que pode (mas isso não é obrigatório) ser acompanhado pelas estruturas else e else if (e esses apenas podem ser usados junto com o if).

If else em C++ – Canal CppModerno
Sintaxe: if else

if (<inicializador>; <expressão condicional>) {
<corpo do if>
} else if (<expressão condicional do else if>) {
<corpo do else if>
} else {
<corpo do else>
}

Como funciona o if else em C++?

O if else é verificado de maneira sequencial, ou seja, primeiro é verificada a expressão condicional do if, e se a condição for verdadeira, o corpo do if é executado e todo o bloco if-else se encerra; se a condição for falsa, é verificada a condição do else if, e o procedimento se repete até que se chegue ao else e o bloco todo acabe.

Note que o else if permite adicionar uma segunda condição a ser testada, mas o else não: se a execução do programa chegar no else, nenhuma condição será testada e o corpo do else será executado.

Fluxograma de um bloco if else em C++
Fluxograma de um bloco if else em C++

Vejamos a seguir um exemplo de uso do if else em C++.


Exemplo 1 – Uso simples do if else em C++

#include <iostream>

using namespace std;

void processarNota(const double x) {
    if (x == 10) {
        cout << "Excelent!" << endl;
    } else if (x > 8) {
        cout << "Muito bom!" << endl;
    } else if (x > 6) {
        cout << "Ok" << endl;
    } else {
        cout << "Boa sorte na próxima prova!" << endl;
    }
}

int main()
{
    const double x = 8.6;
    processarNota(x);

    return 0;
}

Muito bom!


Vemos no exemplo acima que a saída é Muito bom!, pois o valor passado para a função processarNota foi 8.6, e portanto a expressão condicional x == 10 do if dentro da função resultou em false, passando à condição do else if, que é verdadeira (x > 8), causando a saída que vimos e encerrando a execução do bloco if else, da função e em seguida do programa.

Perceba quão importante é a ordem da condições em um bloco if else: se eu houvesse usando uma nota 10 e invertido o if com o else if, eu teria obtido na saída o valor Muito bom!, quando na verdade a minha intenção era obter Excelente!.

Sempre preste atenção à ordem nas quais as expressões condicionais aparecem em um bloco if else.


Inicializadores e if else em C++17

O C++17 introduziu consigo um novo campo nos blocos de controle if else: os inicializadores.

Os inicializadores permitem criar uma variável (ou executar uma expressão de inicialização) antes de começar o teste condicional do if, e tal variável é valida apenas dentro do bloco if-else.

No exemplo abaixo eu criei uma classe simples chamada Programador para poder inicializar um objeto desse tipo no campo de inicialização do meu if. A classe possui dois construtores: um construtor padrão e um construtor que recebe um parâmetro de tipo string que é usado para inicializar o atributo nivel do objeto. Por padrão, o valor de nível é junior. Dêem uma olhada no exemplo 2 e eu retomarei a discussão logo após ele.


Exemplo 2 – if else em C++17 com inicializadores

#include <iostream>

using namespace std;

class Programador {
    public:
        Programador() = default;
        Programador(std::string iNivel): nivel(iNivel) {};

    string nivel {"junior"};
};

int main()
{
    if (Programador junior {}; junior.nivel == "junior") {
        cout << "Programador junior." << endl;
    } else if (junior.nivel == "pleno") {
        cout << "Programador pleno." << endl;
    } else {
        cout << "Programador senior." << endl;
    }
}

Programador junior.


Vemos na saída do exemplo acima o texto Programador junior, indicando que o valor do atributo nivel do objeto junior criado com o construtor padrão da classe Programador é “junior”. Se você tiver lido com atenção, terá notado que declarei a variável junior dentro do if, no campo do inicializador, logo antes do ponto-e-vírugla (;) e da expressão condicional.

A variável junior existe apenas dentro do escopo do if, e se eu tentasse utilizá-la após o if (no fim da main, por exemplo) haveria um erro de compilação como o seguinte: “error: ‘junior’ não foi declarado neste escopo”.

As variáveis criadas no campo de inicialização do if em C++ só existem no escopo do if em questão.


Próximos passos

Chegamos ao fim deste artigo sobre if else em C++, e agora que você já conhece a principal das estruturas de controle condicional da linguagem, é importante conhecer também uma outra estrutura que lhe é muito semelhante: o switch case. Por isso, eu recomendo que você leia o meu artigo sobre switch case em C++. Boa leitura!

Ah, quase esqueci! Se quiser ficar por dentro das novidades do CppModerno e não quiser perder nenhum dos nossos artigos, se inscreva na nossa newsletter usando o formulário abaixo (você pode se desinscrever quando quiser, não se preocupe).

créditos de imagem: Freepik

Foto de perfil de Emanoel

Sou apaixonado por tecnologia, literatura e também filosofia. O cultivo dessas paixões ao longo da minha trajetória me inspiraram a compartilhar aquilo que aprendo com os outros da maneira mais clara que eu possa. Sou formado em Engenharia Elétrica no Brasil, e também sou engenheiro formado na França. Trabalho atualmente como programador C++ em uma multinacional francesa, uma das maiores empresas de TI do mundo.

Leave a Reply

Your email address will not be published. Required fields are marked *