O que é o operador ternário?
Introdução
No desenvolvimento de uma aplicação, é muito comum utilizarmos estruturas condicionais como, por exemplo, if
s e else
s 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.