TransWikia.com

Como não fazer nenhuma ação se o ternario caia no falso?

Stack Overflow em Português Asked by Bruna Sepulveda on February 13, 2021

Quero que se o selectedGenre for diferente de vazio ou null ele execute movie.genre === selectedGenre, mas se for nulo ou vazio só saia da função sem retornar nada.

selectedGenre ? movie.genre === selectedGenre :

2 Answers

No JavaScript não existe o tipo void, então a função, explicitamente ou não, irá retornar algo, se não for especificado, será undefined:

function example() {}
console.log(example());

function example2() { return; }
console.log(example2());

const example3 = () => {};
console.log(example3());

Então você pode retornar undefined no terceiro operando do ternário ("else"):

function example(bool) {
    return bool ? 'anything' : undefined;
}
console.log(example(true), example(false));

const example2 = (bool) => bool ? 'anything' : undefined;
console.log(example2(true), example2(false));

Uma outra forma de obter o valor undefined é utilizando a operador void:

function example(bool) {
    return bool ? 'anything' : void 0;
}
console.log(example(true), example(false));

const example2 = (bool) => bool ? 'anything' : void 0;
console.log(example2(true), example2(false));

Ainda sim, concordo com a resposta anterior, o if é melhor pra esse objetivo, porém, em caso de arrow functions com uma única linha, afim de manter a simplicidade, faz sentido e é aceitável seu uso

Answered by Costamilam on February 13, 2021

Não fazendo um ternário, esse operador foi criado para dar um resultado, se não quer que seja feito um resultado o operador não deve ser usado, claramente é um caso para um if.

Mas se quiser insistir muito nisso, o que reforço ser um erro pode resultar em nulo:

false ? console.log("ok") : null;

Mas não tem como fazer uma função encerrar sem fazer uma gambiarra maior ainda.

Forma correta e mais curta:

if (false) console.log("ok");

E usando em função para dar a saída:

function teste(valor) {
    if (valor) console.log("ok");
    else return;
    console.log("continuou");
}
teste(false);

Coloquei no GitHub para referência futura.

Quando deseja controlar o fluxo de execução o if é o correto. Operadores servem para gerar resultados, não controlar fluxo.

Answered by Maniero on February 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP