Tomando decisões com Go: aprenda a utilizar if, else if e switch
golang

Tomando decisões com Go: aprenda a utilizar if, else if e switch

Faaala dev! Se você está começando com Go (ou Golang, como também é conhecido), entender como tomar decisões no seu código é uma das primeiras habilidades que vai precisar dominar. Nesse artigo, vamos ver como usar as estruturas condicionais mais comuns de Go — if, else if e switch — aplicando isso em exemplos que você vai encontrar no seu dia a dia como dev. Preparado? Então bora codar!
📽️
Quer entender mais sobre as vantagens de programar em Go? Dê o play no vídeo abaixo e descubra por que essa linguagem tem se tornado uma das queridinhas do mercado:
Video preview

O que são estruturas condicionais?

As estruturas condicionais são usadas para decidir quais blocos de código serão executados com base em condições específicas. Em outras palavras, é aqui que seu código começa a "pensar". Vamos imaginar um sistema que controla o progresso dos alunos na formação Go da Rocketseat. Dependendo de quantos projetos o dev completou, o sistema pode exibir mensagens motivadoras ou desbloquear novos conteúdos.
Em Go, essas decisões são tomadas através de estruturas como if, else if, else e switch.
Além do uso educacional, essas estruturas também são fundamentais em outros cenários, como na validação de dados de entrada, controle de permissões de usuários e até na construção de APIs. Por exemplo, ao desenvolver uma API, você pode usar condicionais para verificar se os dados enviados estão corretos antes de continuar o processamento. No controle de permissões, essas estruturas podem determinar se o usuário tem o nível de acesso adequado para realizar determinada ação.

Estrutura if e else

A estrutura if é a mais básica. Ela avalia uma condição e, se for verdadeira, executa um bloco de código. Caso contrário, você pode usar else para executar outro bloco. Vamos ver um exemplo prático?

Exemplo prático: sistema de progresso dos alunos

Imagine que você está criando um sistema para monitorar o progresso de um aluno na formação Go. Dependendo de quantos desafios o aluno completou, você exibe uma mensagem motivadora.
package main import "fmt" func main() { desafiosCompletos := 10 if desafiosCompletos == 13 { fmt.Println("Parabéns, dev! Você completou todos os desafios da formação Go!") } else { fmt.Printf("Falta pouco! Complete mais %d desafios para terminar a formação.\n", 13-desafiosCompletos) } }
Nesse exemplo, o sistema verifica se o dev completou todos os 13 desafios da formação Go. Se sim, ele recebe uma mensagem de parabéns. Caso contrário, incentivamos o aluno a continuar.

Exemplo prático: cálculo de nota final em um desafio da Rocketseat

Imagine que você está desenvolvendo um sistema que calcula a nota final de um aluno com base em suas notas em dois desafios de programação da Rocketseat. O sistema verifica se as notas inseridas são válidas (maiores que 0 e menores ou iguais a 100) antes de calcular a média.
package main import "fmt" func main() { notaDesafio1 := 85.5 notaDesafio2 := 92.0 if notaDesafio1 <= 0 || notaDesafio2 <= 0 || notaDesafio1 > 100 || notaDesafio2 > 100 { fmt.Println("As notas devem estar entre 0 e 100. Verifique os valores inseridos.") } else { media := (notaDesafio1 + notaDesafio2) / 2 fmt.Printf("Sua nota final é %.2f\n", media) if media >= 70 { fmt.Println("Parabéns! Você passou no desafio.") } else { fmt.Println("Continue se esforçando! Você pode melhorar sua performance.") } } }
Nesse exemplo, o sistema da Rocketseat valida se as notas dos desafios estão dentro de um intervalo aceitável antes de calcular a média e fornecer feedback ao aluno sobre seu desempenho.

Estrutura else if

Às vezes, você pode precisar de mais de duas condições. É aí que entra o else if, permitindo a verificação de múltiplas condições em sequência.

Exemplo prático: níveis de progresso

Vamos agora criar um sistema que mostra o nível de progresso do dev com base no número de desafios resolvidos. Dependendo da quantidade de desafios completados, o sistema pode exibir diferentes mensagens.
package main import "fmt" func main() { desafiosCompletos := 45 if desafiosCompletos >= 40 { fmt.Println("Você está quase lá! Já completou mais de 40 desafios.") } else if desafiosCompletos >= 20 { fmt.Println("Bom trabalho! Continue assim, você já completou mais de 20 desafios.") } else { fmt.Println("Ainda há muito pela frente! Continue codando e suba de nível!") } }
Esse exemplo mostra como você pode usar else if para criar várias verificações baseadas no número de desafios resolvidos, motivando o dev a continuar.

Estrutura switch

Quando você tem várias condições baseadas em um único valor, a estrutura switch é uma alternativa mais elegante ao else if. Além de tornar o código mais legível, ela facilita a manutenção.

Exemplo prático: faixas de salário de devs

Vamos criar um exemplo em que, com base no nível de experiência do dev (júnior, pleno ou sênior), mostramos uma faixa salarial estimada. Isso pode ser útil em um sistema de gestão de carreira dentro da Rocketseat.
package main import "fmt" func main() { nivel := "pleno" switch nivel { case "junior": fmt.Println("Salário estimado para dev júnior: R$ 3.000 - R$ 5.000") case "pleno": fmt.Println("Salário estimado para dev pleno: R$ 6.000 - R$ 9.000") case "senior": fmt.Println("Salário estimado para dev sênior: R$ 10.000 - R$ 15.000") default: fmt.Println("Nível não reconhecido. Bora estudar mais para subir de nível!") } }
Aqui, dependendo do nível do dev (júnior, pleno ou sênior), o sistema exibe uma faixa salarial estimada. Se o nível informado não for reconhecido, incentivamos o dev a continuar estudando para subir de nível.
O fallthrough é uma característica do switch em Go que faz com que o código continue executando os próximos casos, mesmo após uma correspondência bem-sucedida. Normalmente, em um switch, o código para de ser executado assim que encontra um case que corresponde ao valor fornecido. No entanto, ao usar o fallthrough, o Go força o programa a continuar executando os blocos de código dos próximos case.
No exemplo a seguir, vamos simular um sistema da Rocketseat que desbloqueia conteúdos de acordo com o nível de dificuldade que o aluno completou (iniciante, intermediário ou avançado). Se o aluno atingir o nível intermediário, ele também desbloqueia automaticamente os conteúdos do nível iniciante. Se atingir o nível avançado, ele desbloqueia todos os conteúdos (iniciante, intermediário e avançado), utilizando o fallthrough.

Exemplo prático: desbloqueio de conteúdos baseado no progresso

package main import "fmt" func main() { nivel := "intermediario" switch nivel { case "iniciante": fmt.Println("Conteúdos desbloqueados: Fundamentos da programação.") fallthrough // continua executando o próximo caso case "intermediario": fmt.Println("Conteúdos desbloqueados: Manipulação de dados e algoritmos.") fallthrough // continua executando o próximo caso case "avancado": fmt.Println("Conteúdos desbloqueados: Arquitetura de software e otimizações de performance.") default: fmt.Println("Nível não reconhecido. Continue aprendendo para desbloquear mais conteúdos!") } }
Neste exemplo, o fallthrough permite que, quando o aluno atinge o nível "intermediário", ele também desbloqueie automaticamente os conteúdos do nível "iniciante". Da mesma forma, se o aluno chegar ao nível "avançado", ele desbloqueia todos os conteúdos anteriores. Sem o fallthrough, o código pararia de executar após o primeiro case que fosse correspondente ao valor de nivel, e os outros conteúdos não seriam desbloqueados.
⚠️
O fallthrough em Go é uma funcionalidade interessante, mas deve ser usada com cautela, já que ela força a execução dos próximos blocos de código, mesmo que um case já tenha sido satisfeito.

Boas práticas com estruturas condicionais

Aqui estão algumas dicas para garantir que seu código seja fácil de entender e manter:
  • Use if para condições simples. Mantenha o código claro e direto ao ponto.
  • Prefira switch quando houver múltiplas condições baseadas em um único valor. Isso ajuda a organizar e deixar o código mais legível.
  • Evite aninhar muitas condições. Múltiplos if aninhados podem tornar o código confuso. Refatore o código em funções menores se necessário.
  • Comente seu código quando necessário. Adicionar comentários explicativos em condicionais mais complexas pode ajudar outros desenvolvedores (e você mesmo no futuro) a entender a lógica aplicada.
  • Mantenha as condições simples e claras. Ao criar condicionais, evite condições longas e difíceis de ler. Se precisar de várias verificações, considere separá-las em funções menores para maior clareza.

Otimização e performance

Para desenvolvedores mais experientes, a escolha entre if, else if e switch vai além da simplicidade e clareza de código. Em aplicações mais robustas, a escolha correta pode ter impacto no desempenho do sistema.
  • Otimização com switch: em muitos casos, o switch pode ser mais eficiente do que uma série de if e else if quando há várias condições baseadas em um único valor. Isso ocorre porque o switch pode ser otimizado pelo compilador, resultando em uma execução mais rápida.
  • Avaliação antecipada: avaliar a complexidade das suas condições também é crucial. Se você sabe que uma condição tem maior probabilidade de ser verdadeira, posicione-a no topo de uma sequência de if ou no primeiro case do switch. Isso ajuda a minimizar o número de verificações necessárias.
  • Estruturas condicionais em grandes sistemas: à medida que os sistemas crescem, pode ser interessante analisar o impacto de decisões condicionais em grandes volumes de dados. Em alguns cenários, como processamento de grandes arrays ou validação em APIs de alta carga, otimizações nas condicionais podem fazer a diferença no tempo de resposta.
Avalie o cenário em que está trabalhando para fazer escolhas otimizadas e garantir que seu código não apenas funcione, mas também seja performático.

Recursos adicionais: aprofunde seu conhecimento em Go

Agora que você já entendeu como funcionam as estruturas condicionais em Go, é hora de se aprofundar e explorar mais sobre a linguagem. Para isso, além deste artigo, existem recursos valiosos que podem te ajudar a continuar evoluindo, como a documentação oficial e artigos da Rocketseat.

Documentação oficial do Go

A documentação oficial de Go é uma referência obrigatória para todos os desenvolvedores. Nela, você encontra exemplos de código, dicas de boas práticas e explicações detalhadas sobre como as estruturas de controle, como if, else e switch, devem ser utilizadas.

Artigos recomendados da Rocketseat

Se você quer aprender mais sobre Go e continuar aprimorando suas habilidades, a Rocketseat também oferece artigos que exploram diferentes aspectos da linguagem. Confira alguns conteúdos essenciais para evoluir ainda mais:
  • Como aprender Go: Guia prático para iniciantes
    • Este guia é perfeito para quem está começando com Go e quer entender o caminho certo para dominar a linguagem. Ele aborda desde os primeiros passos até dicas avançadas para acelerar seu aprendizado.
  • Loops explicados em Go
    • Entender como funcionam os loops em Go é fundamental para quem quer controlar o fluxo de execução do código de forma eficiente. Esse artigo detalha como usar o for, o loop padrão de Go, com exemplos práticos.
  • Como trabalhar com arrays no Go
    • Trabalhar com arrays e slices é uma parte essencial de qualquer projeto em Go. Este artigo mostra como criar, manipular e otimizar o uso dessas estruturas no seu código.
Esses recursos complementam o que você aprendeu aqui e te ajudam a dominar Go de forma prática e aplicada. Não deixe de explorá-los!

Conclusão

A partir de agora, que você já conhece as estruturas condicionais de Go, como if, else if e switch, e viu exemplos práticos aplicados ao dia a dia de um dev, está pronto para aplicar esses conceitos nos seus projetos. Lembre-se: as estruturas condicionais são fundamentais para controlar o fluxo de execução do seu código e vão aparecer constantemente no seu trabalho como programador.
Se você quer continuar avançando, pratique bastante e explore os recursos adicionais que compartilhamos aqui. O próximo passo é transformar esse conhecimento em código e ver como Go pode ajudar a criar aplicações robustas e eficientes. E aí, pronto para continuar evoluindo?
🚀
Se você quer se aprofundar ainda mais e dominar Go, não perca a formação Go da Rocketseat! Bora codar e se destacar no mercado com uma das linguagens mais promissoras do momento!

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA