{"id":251,"date":"2021-05-30T02:45:02","date_gmt":"2021-05-30T02:45:02","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=251"},"modified":"2021-05-30T22:14:16","modified_gmt":"2021-05-30T22:14:16","slug":"php-higienizando-variaveis-com-operador-elvis","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/05\/30\/php-higienizando-variaveis-com-operador-elvis\/","title":{"rendered":"PHP Higienizando Vari\u00e1veis com Operador Elvis ?:"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>function defaultValues(int $index, string $sku, string $code, string name, int $quantity, float $price)\n    $index = $index ?: 1;\n    $sku = $sku ?: 'NOT INFORMED';\n    $code = $code ?: 'NOT INFORMED';\n    $name = $name ?: 'NOT INFORMED';\n    $quantity = $quantity ?: 0;\n    $price = $price ?: 0.0;\n}<\/code><\/pre>\n\n\n\n<p>H\u00e1 algum tempo eu vinha observando em meus c\u00f3digos um uso excessivo do operador tern\u00e1rio para limpeza e padroniza\u00e7\u00e3o de vari\u00e1veis, dai recentemente eu dei uma olhada com mais carinho no operador Elvis. Em alguns artigos eu encontrei explica\u00e7\u00f5es de que ele seria a parte FALSE do operador tern\u00e1rio, mas eu nunca tinha aplicado ele na pr\u00e1tica de uma forma t\u00e3o contundente.<\/p>\n\n\n\n<p>Ent\u00e3o surgiu uma nova oportunidade e fui olhar a documenta\u00e7\u00e3o novamente e &#8220;voila&#8221;. N\u00e3o \u00e9 que serviu direitinho pra fazer higieniza\u00e7\u00e3o de vari\u00e1veis?!<\/p>\n\n\n\n<p>Mas por que n\u00e3o usar o operador tern\u00e1rio? Porque a higieniza\u00e7\u00e3o requer uma a\u00e7\u00e3o apenas e o tern\u00e1rio exige duas.<\/p>\n\n\n\n<p>E o operador Null Coalesce? Bom, o null coalesce testa somente nulls e no meu caso conte\u00fado vazio tamb\u00e9m precisaria ser higienizado.<\/p>\n\n\n\n<p>A melhor op\u00e7\u00e3o ent\u00e3o recaiu sobre o operador Elvis, por que ele executa a\u00e7\u00e3o para todo e qualquer conte\u00fado avaliado como FALSEY. Grosseiramente falando o FALSEY equivale a qualquer conte\u00fado convertido para boolean que resulta em falso&#8230; veja os exemplos abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var_dump(null ?: 'null is falsey');      \/\/ \"null is falsey\"\nvar_dump(true ?: 'true is truthy');      \/\/ bool(true)\nvar_dump(false ?: 'false is falsey');    \/\/ \"false is falsey\"\nvar_dump('' ?: 'empty string is falsey');\/\/ \"empty string is falsey\"\nvar_dump(' '?: 'space is truthy');       \/\/ \" \"\nvar_dump(empty(null) ?: 'empty null is truthy'); \/\/ bool(true)\nvar_dump(0 ?: 'zero int is falsey');     \/\/ \"zero int is falsey\"\nvar_dump(0.0 ?: 'zero float is falsey'); \/\/ \"zero float is falsey\"<\/code><\/pre>\n\n\n\n<p>Agora compare os resultados com o NULL COALESCE&#8230; <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var_dump(null ?? 'null is coalesced');        \/\/ \"null is coalesced\"\nvar_dump(true ?? 'true is not coalesced');    \/\/ bool(true)\nvar_dump(false ?? 'false is not coalesced');  \/\/ bool(false)\nvar_dump('' ?? 'empty string is not coalesced'); \/\/ \"\"\nvar_dump(' ' ?? 'space is not coalesced');       \/\/ \" \"\nvar_dump(empty(null) ?? 'empty null is not coalesced'); \/\/ bool(true)\nvar_dump(0 ?? 'zero is not coalesced');         \/\/ int(0)\nvar_dump(0.0 ?? 'zero float is not coalesced'); \/\/ float(0)<\/code><\/pre>\n\n\n\n<p> Claramente a escolha correta \u00e9 usar o operador Elvis para a higieniza\u00e7\u00e3o pois nulls, zeros integer or float, boolean false, empty string, todos sem excess\u00e3o ir\u00e3o disparar a a\u00e7\u00e3o para higieniza\u00e7\u00e3o, evitando assim o uso de ifs e outros testes desnecess\u00e1rios.<\/p>\n\n\n\n<p>Happy CleanCode!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"90\" height=\"90\" src=\"http:\/\/jplatz.com.br\/syntax\/wp-content\/uploads\/2021\/05\/elvis-operator.png\" alt=\"\" class=\"wp-image-252\"\/><figcaption>Elvis Operator<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e1 algum tempo eu vinha observando em meus c\u00f3digos um uso excessivo do operador tern\u00e1rio para limpeza e padroniza\u00e7\u00e3o de vari\u00e1veis, dai recentemente eu dei uma olhada com mais carinho no operador Elvis. Em alguns artigos eu encontrei explica\u00e7\u00f5es de que ele seria a parte FALSE do operador tern\u00e1rio, mas eu nunca tinha aplicado ele [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,2,3],"tags":[132,61,131],"class_list":["post-251","post","type-post","status-publish","format-standard","hentry","category-backend","category-coding","category-php","tag-132","tag-cleancode","tag-elvis-operator"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":4,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"predecessor-version":[{"id":259,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/251\/revisions\/259"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}