Estou usando o jQuery 1.7.1
Estou apenas começando a usar o operador ternário JavaScript para substituir instruções if / else simples. Fiz isso com sucesso em vários lugares. Fiquei surpreso quando consegui fazer outra coisa funcionar, quando pensei que com certeza não funcionaria, mas tentei mesmo assim.
Aqui está a declaração original:
function updateItem() {
$this = $(this);
var IsChecked = $this.hasClass("IsChecked");
if (IsChecked == true){
removeItem($this);
} else {
addItem($this);
}
}
Aqui está a mesma função usando o operador ternário:
function updateItem() {
$this = $(this);
var IsChecked = $this.hasClass("IsChecked");
(IsChecked == true) ? removeItem($this) : addItem($this);
}
Fiquei surpreso porque todos os exemplos que vi sendo usados estavam meramente definindo variáveis como esta:
x = (1 < 2) ? true : false;
Minha pergunta é se esse é um uso "normal" e funcionará na maioria das versões do JavaScript? Onde isso vai falhar? Existem outros usos menos óbvios para isso?
ATUALIZAÇÃO - Obrigado pelo conselho do "mundo real" !!!
Estou usando isso como minha função:
function updateItem() {
$this = $(this);
$this.hasClass("IsChecked") ? removeItem($this) : addItem($this);
}
(IsChecked ? removeItem : addItem)($this)
. No entanto, para responder à sua pergunta, sim, isso é normal e não há nada de errado em usar operadores ternários, desde que eles não prejudiquem a capacidade de manutenção ou legibilidade em uma situação onde isso é necessário. jsfiddle.net/vsB3f
if($this.hasClass("IsChecked")) removeItem($this); else addItem($this)
é a maneira correta. O operador ternário não se destina a casos como este, mas a coisas como foo(isChecked ? 'bar' : meow());
(ou seja, quando você se preocupa com o "valor de retorno" de tudo o que você faz nos blocos then / else)
$(this).hasClass("IsChecked") ? removeItem($this) : addItem($this);
Eu posso entender seu código como está em uma linha, então ele se encaixa na minha regra (veja a postagem abaixo). Funciona para mim.