Melhores Práticas para Declarações Condicionais em JavaScript
Este artigo explica as melhores práticas para declarações condicionais em JavaScript.
YouTube Video
Melhores Práticas para Declarações Condicionais em JavaScript
As declarações if
são uma estrutura de controle fundamental nos programas em JavaScript. No entanto, à medida que o código se torna mais complexo, o número de declarações if
pode aumentar, dificultando a leitura do código. Desta vez, vamos nos aprofundar nas melhores práticas para projetar adequadamente as declarações if
em JavaScript para melhorar a legibilidade e a manutenibilidade.
Simplifique o código usando flags.
Simplifique condições que envolvem múltiplos critérios usando valores booleanos.
Exemplos a Evitar
1// Bad Example
2if (isUserLoggedIn && user.hasPaymentInfo && user.cartItems.length > 0) {
3 console.log('Proceed to checkout');
4}
Exemplos Melhorados
Use flags para esclarecer condições.
1// Good Example
2const canProceedToCheckout = isUserLoggedIn && user.hasPaymentInfo && user.cartItems.length > 0;
3
4if (canProceedToCheckout) {
5 console.log('Proceed to checkout');
6}
Mantenha as Declarações Condicionais Simples
Quando uma expressão condicional se torna complexa, a legibilidade do código diminui, portanto, é necessário manter a condição simples.
Exemplos a Evitar
1// Bad example
2if (user && user.isLoggedIn &&
3 user.permissions && user.permissions.includes('admin')) {
4 console.log('Welcome, admin!');
5}
Exemplos Melhorados
Ao dividir a condição em variáveis com significados específicos, você pode clarificar sua intenção.
1// Good Example
2const isUserLoggedIn = user?.isLoggedIn;
3const hasAdminPermission = user?.permissions?.includes('admin');
4
5if (isUserLoggedIn && hasAdminPermission) {
6 console.log('Welcome, admin!');
7}
Esclareça a precedência dos operadores lógicos
Nas declarações if
em JavaScript, a má compreensão da precedência dos operadores lógicos pode levar a comportamentos indesejados.
Exemplos a Evitar
1// Bad example
2if (isAdmin && isActive || isPremium) {
3 // The precedence of `&&` is higher than `||`,
4 // so this expression is interpreted as
5 // ((isAdmin && isActive) || isPremium)
6 console.log("Access granted");
7} else {
8 console.log("Access denied");
9}
Exemplos Melhorados
Quando a precedência de operadores não está clara, você pode usar parênteses de forma apropriada para esclarecer.
1// Good Example
2if (isAdmin && (isActive || isPremium)) {
3 console.log("Access granted");
4} else {
5 console.log("Access denied");
6}
Utilizando avaliação de curto-circuito
O JavaScript suporta avaliação de circuito curto para os operadores &&
(E) e ||
(OU). Avaliação de circuito curto significa que, quando o resultado de uma condição é determinado durante a avaliação, a parte restante não é avaliada.
E
(&&
): Se o lado esquerdo for avaliado como falso, o lado direito não é avaliado e seu valor é retornado.OU
(||
): Se o lado esquerdo for avaliado como verdadeiro, o lado direito não é avaliado e seu valor é retornado.
Exemplos a Evitar
1// Bad Example
2if (user?.someComplexFunction() && user?.isLoggedIn) {
3 // ...
4}
Exemplos Melhorados
Neste código, a função user?.someComplexFunction()
é chamada mesmo se user?.isLoggedIn
for false
.
Compreender a avaliação de circuito curto pode ajudá-lo a evitar cálculos desnecessários e a escrever código eficiente.
1// Good Example
2if (user?.isLoggedIn && user?.someComplexFunction()) {
3 // ...
4}
Minimize o Uso de Declarações else
As declarações else
podem aumentar a carga cognitiva ao acompanhar o código. Em vez disso, considere utilizar retornos antecipados.
Exemplos a Evitar
1// Bad Example
2function getUserRole(user) {
3 if (!user) {
4 return 'Guest';
5 } else {
6 return user.role;
7 }
8}
Exemplos Melhorados
Clarifique as condições com retornos antecipados.
1// Good Example
2function getUserRole(user) {
3 if (!user) return 'Guest';
4 return user.role;
5}
Uso Adequado do Operador Ternário
Para condições simples, usar um operador ternário pode encurtar seu código. No entanto, evite aninhamento ou lógica complexa.
Exemplos a Evitar
1// Bad Example
2let message = user.isLoggedIn ? user.isAdmin ?
3 'Welcome, admin!'
4 : 'Welcome, user!'
5 : 'Please log in.';
Exemplos Melhorados
Priorize a legibilidade dividindo as condições.
1// Good Example
2if (!user.isLoggedIn) {
3 message = 'Please log in.';
4} else if (user.isAdmin) {
5 message = 'Welcome, admin!';
6} else {
7 message = 'Welcome, user!';
8}
Utilizando valores padrão e avaliação de curto-circuito
Use valores padrão e avaliação de curto-circuito para reduzir ramificações e simplificar o código.
Exemplos a Evitar
1// Bad Example
2let displayName;
3if (user && user.name) {
4 displayName = user.name;
5} else {
6 displayName = 'Guest';
7}
Exemplos Melhorados
Nesse caso, usar operadores lógicos torna o código mais conciso.
1// Good Example
2displayName = user?.name || 'Guest';
Diferencie adequadamente quando usar declarações switch
.
Quando várias condições são necessárias, declarações switch
podem tornar as intenções mais claras.
Exemplos a Evitar
1// Bad Example
2if (status === 'success') {
3 console.log('Operation was successful.');
4} else if (status === 'error') {
5 console.error('There was an error.');
6} else if (status === 'pending') {
7 console.log('Operation is still pending.');
8} else {
9 console.log('Unknown status.');
10}
Exemplos Melhorados
Usar declarações switch
pode ajudar a organizar o código.
1// Good Example
2switch (status) {
3 case 'success':
4 console.log('Operation was successful.');
5 break;
6 case 'error':
7 console.error('There was an error.');
8 break;
9 case 'pending':
10 console.log('Operation is still pending.');
11 break;
12 default:
13 console.log('Unknown status.');
14}
Utilizando cláusulas de proteção com condições de saída antecipada
Uma cláusula de guarda é uma técnica que utiliza declarações if
para sair de uma função rapidamente.
Exemplos a Evitar
1// Bad Example
2function processOrder(order) {
3 if (order && order.isValid) {
4 if (order.items && order.items.length > 0) {
5 // Continue processing
6 }
7 }
8}
Exemplos Melhorados
Use cláusulas de guarda para reduzir aninhamento.
1// Good Example
2function processOrder(order) {
3 if (!order?.isValid) return;
4 if (!order.items?.length) return;
5
6 // Continue processing
7}
Escreva comentários para esclarecer intenções.
Para condições complexas ou ramificações críticas, adicione comentários concisos e claros para transmitir a intenção do código.
Exemplos a Evitar
1// Bad Example
2if (stock > 10 && !isRestricted) {
3 console.log('Available for purchase.');
4}
Exemplos Melhorados
Adicione comentários para tornar as intenções claras.
1// Good Example
2// The product must have at least 10 items in stock
3// and not be on the restricted list.
4if (stock > 10 && !isRestricted) {
5 console.log('Available for purchase.');
6}
Conclusão
Usar de forma eficaz as declarações if
do JavaScript pode melhorar muito a legibilidade e a manutenção do código.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.