O que é o operador ternário?

O que é o operador ternário?

Introdução

No desenvolvimento de uma aplicação, é muito comum utilizarmos estruturas condicionais como, por exemplo, ifs e elses ou switch case. Porém, em algum momento da nossa vida, provavelmente, um desses testes que realizamos é tão simples que retorna um valor para apenas duas possibilidades.

Por exemplo, suponhamos que precisamos criar uma funcionalidade para gerar uma bonificação e a regra para essa funcionalidade é a seguinte:

  • Se o salário for maior que R$ 1000, o bônus é de 10%
  • Se o salário for menor ou igual a R$ 1000, o bônus é de 15%

Uma solução seria utilizar um if e else como já conhecemos, como por exemplo no Java:


double salario = 1000; 
double bonus = 0.0;

if (salario > 1000) { bonus = salario * 0.10; }
 else { bonus = salario * 0.15; }

System.out.println(bonus);

Nesse exemplo o resultado é 150.0 pois o salário é menor que R$ 1000.0, ou seja, bônus de 15%.

Entretanto, perceba que o que estamos fazendo é apenas um teste bem básico que tem apenas uma única linha de código dentro do if ou do else. Será que não existe uma maneira mais simples de resolver o mesmo problema?

Em um cenário similar a esse, podemos também utilizar o operador ternário que funciona com o mesmo conceito do if e else, porém, a única diferença é que precisamos devolver um valor após o teste estritamente em uma única linha!


double salario = 1000; 
double bonus = salario * (salario > 1000 ? 0.10 : 0.15); 
System.out.println(bonus);

Com esse código acima temos o mesmo resultado de antes, ou seja, 150.0. Mas como funciona esse operador ternário? A estrutura de um operador ternário é compreendida da seguinte forma:

condição? valor se for verdareiro : valor se for falso

Portanto, inicialmente temos um teste (podemos adicionar um teste qualquer), ou seja, qualquer teste devolve um valor booleano, então, definimos o primeiro parâmetro que é justamente o valor que será retornado caso o teste for verdadeiro e o segundo que será retornado caso for falso!

Justamente pelo fato de realizar essas 3 operações, o chamamos de operador ternário. Mas isso é só em Java? Não! Diversas linguagens implementam esse mesmo recurso! Vejamos alguns exemplos:

C


double salario = 1000; 
double bonus = salario * (salario > 1000 ? 0.10 : 0.15);

Ruby


salario = 1000;
bonus = salario * (salario > 1000 ? 0.10 : 0.15);

C


double salario = 1000;
double bonus = salario * (salario > 1000 ? 0.10 : 0.15);

JavaScript


var salario = 1000;
var bonus = salario * (salario > 1000 ? 0.10 : 0.15);

PHP


$salario = 1000;
$bonus = $salario * ($salario > 1000 ? 0.10 : 0.15);

Observe que mesmo sendo linguagens diferentes, o recurso do operador ternário contém a mesma estrutura! Entretanto, em algumas linguagens de programação, temos algumas variantes, ou seja, o mesmo conceito do operador ternário que vimos, porém, com algumas diferenças na syntax. Vejamos alguns exemplos:

Lua

 salario = 1000 bonus = salario * (salario > 1000 and 0.10 or 0.15)

Fortran

 salario = 1000 bonus = salario * merge(0.10, 0.15, salario > 1000)

Achou interessante? Então dê uma olhada na quantidade de operadores ternários que a linguagem python nos fornece resolvendo o mesmo problema:


salario = 1000

bonus = salario * (lambda:0.15, lambda:0.10)[salario > 1000]()
bonus = salario * (0.15, 0.10)[salario > 1000]
bonus = salario * {True: 0.10, False: 0.15}[salario > 1000] 
bonus = salario * ((salario > 1000) and 0.10 or 0.15)

Entretanto, é sempre importante lembrar que a utilização dessas variantes do operador ternário pode ser problemático, pois dificulta a compreensão de desenvolvedores que não estão acostumados ou simplesmente não conhece.

Portanto, recomendamos que evite o máximo possível a utilização dessas variantes. O que achou do operador ternário? Está pronto para utilizá-lo no seu próximo algoritmo?

Que tal aprender mais sobre programação? Na Alura, temos diversos cursos online de programação de diversas linguagens! Abordamos o conteúdo desde cursos mais introdutórios, como introdução a lógica com JavaScript a cursos de desenvolvimento de aplicações para dispositivo móveis (Android e iOS) ou aplicações web.

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Programação