Artigos de Tecnologia e Negócios

O que é o operador ternário?

Alex Felipe
Alex Felipe

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:

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.**

Artigos de Tecnologia e Negócios