16-02-2023
Código Javascript Limpo - 3 de 5
3. SIMPLIFICAÇÕES DE CÓDIGO
É comum, ao longo do tempo, que o código cresça e se torne mais complexo, o que pode tornar mais difícil a sua manutenção. Nesse sentido, é importante que o programador tenha em mente algumas boas práticas para manter o código limpo e organizado.
Para além das que já referimos nos temas anteriores uma das formas de tornar o código mais limpo e organizado é ter estruturas simples, por exemplo, substituindo condições encadeadas por cláusulas bem como switch/case por objetos, tornando o código mais simplificado, eficiente e legível.
SUBSTITUIR CONDIÇÕES ENCADEADAS POR CLAUSULAS
Esta substituição pode ser importante quando temos um monte de 'if-else' encadeados. Com as cláusulas, o código acaba por ficar mais curto, legível e objetivo, sem comprometer a sua eficiência.
Mau exemplo:
function processData(data) { let result; if (data.type === "A") { if (data.value >= 0 && data.value <= 10) result = data.value * 10; else result = data.value * 5; } else if (data.type === "B") { if (data.value >= 5 && data.value <= 15) result = data.value * 15; else result = data.value * 10; } else result = data.value * 5; return result; }
Bom exemplo:
function processData(data) { switch (data.type) { case "A": return data.value >= 0 && data.value <= 10 ? data.value * 10 : data.value * 5; case "B": return data.value >= 5 && data.value <= 15 ? data.value * 15 : data.value * 10; default: return data.value * 5; } }
No "mau exemplo" são usadas várias condições encadeadas, isto é, é necessário percorrer vários níveis de if-else para se chegar a uma resposta final, o que torna o código muito longo e pouco eficiente, para além de ser mais difícil de ler e compreender. A sua substituição por switch/case com uma pequena ajuda de operações ternárias permitiu encurtar o código e torná-lo mais claro e organizado sem comprometer o resultado final.
Esta substituição por switch/case, em determinados casos, poderão ainda ser otimizados como veremos de seguida.
SUBSTITUIÇÃO DE SWITCH/CASE POR OBJECTOS
Mau exemplo:
const getUserName = (id) => { switch (id) { case "abc-111-zzz": return "Marcus74"; case "abc-222-zzz": return "Maria63"; case "abc-333-zzz": return "Angelmaria54"; default: return "Admin123"; } };
Bom exemplo:
const userNames = { "abc-111-zzz": "Marcus74", "abc-222-zzz": "Maria63", "abc-333-zzz": "Angelmaria54", }; const geUserName = (id) => userNames[id] || "Admin123";
O código em "bons exemplos" é o mais indicado porque usa uma estrutura de dados mais apropriada, objeto 'userNames'. Desta maneira, o código fica ainda mais simples e fácil de se compreender, sem alterar o resultado. Além disso, o uso de um objeto faz com que o código fique mais eficiente, uma vez que as operações de acesso aos dados são mais rápidas do que as operações dentro de um switch.
Por fim, e com o uso do operador condicional (||) é possível ainda fazer uma verificação de existência de uma chave no objeto, retornando um valor padrão caso não encontre correspondências válidas.
Todos estes casos depende sempre do contexto. Se forem pequenos pedaços de código o "mau exemplo" funcionaria perfeitamente ou por outras palavras não se ganharia muito em altera-lo, mas se esse código tiver tendência a crescer (algo que é sempre possível e muitas vezes é difícil de saber à priori) é melhor usar as alternativas demonstradas.
Artigos Relacionados:
RELACIONADAS