Operador ternário em Go: como substituir C e não enlouquecer

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: operador ternário — amigo ou inimigo?

\n\n

Se você veio para Go vindo do mundo C, C++, Java ou JavaScript, certamente está acostumado com a construção concisa:

\n\n
int max = (a > b) ? a : b;
\n\n

Este é o operador ternário. Ele é compacto, elegante e permite escrever uma ramificação simples em uma única linha. Mas quando você começa a programar em Go, uma surpresa o aguarda: Go não tem operador ternário. De forma alguma. Nada de ? :.

\n\n

Por que os criadores da linguagem tomaram essa decisão? Como escrever atribuições condicionais curtas agora? E o principal — como fazer isso de forma idiomática, ou seja, no estilo aceito pela comunidade Go?

\n\n

Neste artigo, abordaremos:

\n
    \n
  • Por que Go não tem operador ternário (spoiler: é uma decisão consciente).
  • \n
  • Como substituir o ternário com if-else.
  • \n
  • Técnicas avançadas: funções, map, inlining.
  • \n
  • Quando você pode (e deve) quebrar a regra.
  • \n
\n\n

Vamos lá!

\n\n

Por que Go abandonou o operador ternário?

\n\n

A resposta é simples e está na filosofia da linguagem: legibilidade é mais importante que concisão.

\n\n

Robert Griesemer (um dos criadores do Go) disse uma vez: "O operador ternário é uma fonte de bugs. É muito fácil de ser lido incorretamente, especialmente quando aninhado". E isso é verdade. Lembre-se pelo menos do famoso exemplo em C:

\n\n
int x = (a ? b : c) ? d : e;
\n\n

Tente entender rapidamente o que ele faz? Pois é, os criadores do Go decidiram que é melhor sacrificar uma linha, mas tornar o código óbvio.

\n\n

Em Go, a prioridade é a clareza das intenções. Se você escreve uma condição, que ela seja explícita. O operador ternário frequentemente se transforma em um "número mágico": você olha para a linha e não entende a lógica imediatamente. Em Go, isso não deve acontecer.

\n\n

Substituição básica: if-else como idioma

\n\n

A maneira mais simples e correta de substituir o ternário é usar o if-else comum. Sim, isso ocupa 3 linhas em vez de 1, mas é lido sem esforço.

\n\n

Exemplo: encontrar o máximo de dois números.

\n\n

Em C:

\n
int max = (a > b) ? a : b;
\n\n

Em Go (idiomático):

\n
var max int\nif a > b {\n    max = a\n} else {\n    max = b\n}
\n\n

"Mas isso é mais longo!" — você dirá. Sim. Mas veja por outro lado: daqui a um mês você abrirá o código e verá a lógica imediatamente. Sem parênteses, sem ambiguidades. Apenas "se a for maior que b, então max = a, senão max = b".

\n\n

Além disso, a comunidade Go considera esse estilo como o único correto para condições simples. Não tente "dar um jeitinho" e colocar tudo em uma linha — isso será considerado de mau gosto.

\n\n

Técnicas avançadas: quando se deseja concisão

\n\n

Às vezes você escreve código onde o if-else ocupa 10 linhas, embora na prática seja uma atribuição simples. Nesses casos, você pode aplicar alguns padrões que mantêm a idiomática, mas tornam o código mais compacto.

\n\n

1. Função auxiliar

\n\n

Se você precisa frequentemente escolher entre dois valores, extraia a lógica para uma função. Isso é especialmente útil para operações de uma linha.

\n\n
func ternary(cond bool, a, b string) string {\n    if cond {\n        return a\n    }\n    return b\n}\n\n// Uso:\ngreeting := ternary(isMorning, "Bom dia", "Boa noite")
\n\n

Importante: não nomeie a função como ternary — isso é considerado de mau gosto, pois você está tentando "introduzir" o ternário pelos fundos. É melhor dar um nome significativo, como ifElse ou choose. Mas se você está escrevendo para si mesmo — por que não?

\n\n

2. Uso de map para seleção

\n\n

Se a condição se resume a escolher entre duas opções, você pode usar um map com chaves booleanas. Isso parece incomum, mas às vezes é ainda mais legível.

\n\n
var result = map[bo                

Blogs

Book Recommendations