function defaultValues(int $index, string $sku, string $code, string name, int $quantity, float $price)
$index = $index ?: 1;
$sku = $sku ?: 'NOT INFORMED';
$code = $code ?: 'NOT INFORMED';
$name = $name ?: 'NOT INFORMED';
$quantity = $quantity ?: 0;
$price = $price ?: 0.0;
}
Há algum tempo eu vinha observando em meus códigos um uso excessivo do operador ternário para limpeza e padronização de variáveis, dai recentemente eu dei uma olhada com mais carinho no operador Elvis. Em alguns artigos eu encontrei explicações de que ele seria a parte FALSE do operador ternário, mas eu nunca tinha aplicado ele na prática de uma forma tão contundente.
Então surgiu uma nova oportunidade e fui olhar a documentação novamente e “voila”. Não é que serviu direitinho pra fazer higienização de variáveis?!
Mas por que não usar o operador ternário? Porque a higienização requer uma ação apenas e o ternário exige duas.
E o operador Null Coalesce? Bom, o null coalesce testa somente nulls e no meu caso conteúdo vazio também precisaria ser higienizado.
A melhor opção então recaiu sobre o operador Elvis, por que ele executa ação para todo e qualquer conteúdo avaliado como FALSEY. Grosseiramente falando o FALSEY equivale a qualquer conteúdo convertido para boolean que resulta em falso… veja os exemplos abaixo:
var_dump(null ?: 'null is falsey'); // "null is falsey"
var_dump(true ?: 'true is truthy'); // bool(true)
var_dump(false ?: 'false is falsey'); // "false is falsey"
var_dump('' ?: 'empty string is falsey');// "empty string is falsey"
var_dump(' '?: 'space is truthy'); // " "
var_dump(empty(null) ?: 'empty null is truthy'); // bool(true)
var_dump(0 ?: 'zero int is falsey'); // "zero int is falsey"
var_dump(0.0 ?: 'zero float is falsey'); // "zero float is falsey"
Agora compare os resultados com o NULL COALESCE…
var_dump(null ?? 'null is coalesced'); // "null is coalesced"
var_dump(true ?? 'true is not coalesced'); // bool(true)
var_dump(false ?? 'false is not coalesced'); // bool(false)
var_dump('' ?? 'empty string is not coalesced'); // ""
var_dump(' ' ?? 'space is not coalesced'); // " "
var_dump(empty(null) ?? 'empty null is not coalesced'); // bool(true)
var_dump(0 ?? 'zero is not coalesced'); // int(0)
var_dump(0.0 ?? 'zero float is not coalesced'); // float(0)
Claramente a escolha correta é usar o operador Elvis para a higienização pois nulls, zeros integer or float, boolean false, empty string, todos sem excessão irão disparar a ação para higienização, evitando assim o uso de ifs e outros testes desnecessários.
Happy CleanCode!