Estruturas condicionais

O que acontece se você colocar uma estrutura if-else dentro da outra? Veja neste artigo o conceito de estruturas condicionais.

09/11/2023

youtube-thumb
algol-youtube-play

Aqui começa o segundo nível do seu aprendizado em programação de computadores. Recomendamos que, antes de aprender sobre estruturas condicionais, você já tenha lido todos os artigos da primeira parte do curso de programação básica.

Este artigo trata, especificamente, da evolução do conceito de “declarações condicionais”. Se você ainda não sabe o que são declarações condicionais, certamente você deve ler este artigo em que explicamos com detalhes sobre o assunto.

Bom! Mas vamos ao que interessa!


O que são estruturas condicionais?

Quando queremos programar tomadas de decisão em nosso algoritmo, utilizamos as declarações condicionais; os comandos if-else. Veja abaixo um exemplo de um condicional em um algoritmo que verifica se um aluno pertence à categoria INFANTIL (com idade entre 0 – 11):

1.if(idade < 12){
2. println("Categoria: INFANTIL");
3.}

Agora imagine que precisamos adicionar mais uma categoria em nosso algoritmo. Caso o aluno não seja INFANTIL, precisamos verificar ainda se ele pertence à categoria JUVENIL (com idade entre 12 – 15):

1.if(idade < 12){
2. println("Categoria: INFANTIL");
3.} else {
4. if(idade < 16){
5. println("Categoria: JUVENIL");
6. }
7.}

Observe nas linhas 4, 5 e 6 (código acima) que colocamos uma nova declaração condicional dentro da primeira. Caso a expressão idade < 12 (linha 1 do código acima) retorne falso, a expressão idade < 16 (linha 4 do código acima) será avaliada.

Agora imagine que precisamos adicionar mais uma categoria. Caso o aluno não seja nem INFANTIL e nem JUVENIL, precisamos verificar ainda se ele pertence à categoria JUNIOR (com idade entre 16 – 19):

1.if(idade < 12){
2. println("Categoria: INFANTIL");
3.} else {
4. if(idade < 16){
5. println("Categoria: JUVENIL");
6. } else {
7. if(idade < 20){
8. println("Categoria: JUNIOR");
9. }
10. }
11.}

Observe nas linhas 7, 8 e 9 (código acima) que colocamos uma nova declaração condicional, criando uma série de if-else aninhados (um dentro do outro).

Isso é uma ESTRUTURA CONDICIONAL! Uma estrutura formada por declarações condicionais, uma dentro da outra.

Veja abaixo o código final do algoritmo, com a categoria ADULTO já adicionada:

1.if(idade < 12){
2. println("Categoria: INFANTIL");
3.} else {
4. if(idade < 16){
5. println("Categoria: JUVENIL");
6. } else {
7. if(idade < 20){
8. println("Categoria: JUNIOR");
9. } else {
10. println("Categoria: ADULTO");
11. }
12. }
13.}

Otimização das estruturas condicionais

As estruturas condicionais da forma padrão sofrem de um grave problema de “legibilidade” (dificuldade de leitura). Observe no algoritmo das categorias de idade como as inserções de if-else dentro de outros if-else faz com que o código cresça para a direita. Tendendo a uma pirâmide deitada. Observe no código abaixo esse fenômeno:

1.if(idade < 12){
2. println("Categoria: INFANTIL");
3.} else {
4. if(idade < 16){
5. println("Categoria: JUVENIL");
6. } else {
7. if(idade < 20){
8. println("Categoria: JUNIOR");
9. } else {
10. println("Categoria: ADULTO");
11. }
12. }
13.}

Isso pode se transformar em um enorme problema se novas condições precisarem ser adicionadas no algoritmo! Imagine que, ao invés de 4, tivéssemos dez categorias?

Para resolver esse problema, a maioria das linguagens de programação implementam a OTIMIZAÇÃO DAS ESTRUTURAS CONDICIONAIS. Essa otimização é aplicada através do comando “else if”.

Funciona da seguinte forma: ao invés de criar a estrutura encadeada da maneira padrão:

1.if(expressão 1){
2. // comandos
3.} else {
4. if(expressão 2){
5. // comandos
6. }
7.}

Substituímos o comando else (linha 3 do código acima) e o comando if (linha 4 do código acima) pelo comando “else if”. Veja abaixo como fica o código usando essa otimização:

1.if(expressão 1){
2. // comandos
3.} else if(expressão 2){
4. // comandos
5.}

Observe que esta estrutura otimizada perdeu um nível de indentação, não apresentando mais a tendência de uma pirâmide deitada.

Também é importante observar que pode haver algumas variações dessa otimização em algumas linguagens de programação. Na linguagem Python, por exemplo, é usada a palavra “elif” no lugar de “else if”. Veja abaixo o exemplo:

1.if expressão 1:
2. # comandos
3.elif expressão 2:
4. # comandos

Observe abaixo o código completo (em várias linguagens de programação) do algoritmo das categorias de idade já otimizado. Observe como ele é mais enxuto e mais elegante.

Java
C
C++
C#
Python
1.import java.util.Scanner;
2.class Main {
3. public static void main(String[] args) {
4. System.out.println("Digite a sua idade:");
5. Scanner scanner = new Scanner(System.in);
6. int idade = scanner.nextInt();
7. if(idade < 12){
8. System.out.println("Categoria: INFANTIL");
9. } else if(idade < 16){
10. System.out.println("Categoria: JUVENIL");
11. } else if(idade < 20){
12. System.out.println("Categoria: JUNIOR");
13. } else {
14. System.out.println("Categoria: ADULTO");
15. }
16. }
17.}
1.#include <stdio.h>
2.int main(void) {
3. printf("Digite a sua idade:");
4. int idade;
5. scanf("%d",&idade);
6. if(idade < 12){
7. printf("Categoria: INFANTIL");
8. } else if(idade < 16){
9. printf("Categoria: JUVENIL");
10. } else if(idade < 20){
11. printf("Categoria: JUNIOR");
12. } else {
13. printf("Categoria: ADULTO");
14. }
15. return 0;
16.}
1.#include <iostream>
2.int main() {
3. std::cout << "Digite a sua idade:\n";
4. int idade;
5. std::cin >> idade;
6. if(idade < 12){
7. std::cout << "Categoria: INFANTIL\n";
8. } else if(idade < 16){
9. std::cout << "Categoria: JUVENIL\n";
10. } else if(idade < 20){
11. std::cout << "Categoria: JUNIOR\n";
12. } else {
13. std::cout << "Categoria: ADULTO\n";
14. }
15.}
1.using System;
2.class MainClass {
3. public static void Main (string[] args) {
4. Console.WriteLine("Digite a sua idade:");
5. int idade = Convert.ToInt32(Console.ReadLine());
6. if(idade < 12){
7. Console.WriteLine("Categoria: INFANTIL");
8. } else if(idade < 16){
9. Console.WriteLine("Categoria: JUVENIL");
10. } else if(idade < 20){
11. Console.WriteLine("Categoria: JUNIOR");
12. } else {
13. Console.WriteLine("Categoria: ADULTO");
14. }
15. }
16.}
1.idade = int(input("Digite a sua idade:"));
2.if idade < 12:
3. print("Categoria: INFANTIL");
4.elif idade < 16:
5. print("Categoria: JUVENIL");
6.elif idade < 20:
7. print("Categoria: JUNIOR");
8.else:
9. print("Categoria: ADULTO");

Continue a sua evolução em programação e leia o nosso artigo sobre o comando while, o seu início no fantástico universo das estruturas de repetição.

autor

David Santiago

Mestre em Sistemas e Computação. Graduado em Sistemas de Informação. Professor de Linguagem de Programação, Algoritmos, Estruturas de Dados e Desenvolvimento de Jogos Digitais.

Outros artigos