código

16 mar, 2021

Programando condições sem escrever condicionais: um exercício de lógica

Publicidade

Comumente escrevemos códigos como robôs, aprendemos a seguir uma lógica procedural e não treinamos como pensar de forma diferente para resolver um mesmo problema de maneira até mais simples e limpa. Um exemplo é o clássico uso do else em situações completamente desnecessárias, como neste código:

function maior_que_cinco(valor){
if (valor > 5)
return true
else
return false
}

Neste exemplo o else pode ser omitido, pois seu uso é redundante. Assim o código ficará:

function maior_que_cinco(valor){
    if (valor > 5)
        return true    

    return false
}

Hora de ir além

Cenário

const formata_moeda = (moeda, valor) => {
switch (moeda) {
case 'real':
return 'R$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ".$1,$2")
break

case 'dolar':
return 'US$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ",$1.$2")
break
}
}

const formata_moeda = (moeda, valor) => {
const moedas = {
'real': 'R$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ".$1,$2"),
'dolar': 'US$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ",$1.$2")
}

return moedas[moeda]
}

O código já ficou bem melhor! Mas podemos melhorá-lo ainda mais ao explorar a grande vantagem da arrow function e remover a constante e o return, mantendo apenas o dicionário.

const formata_moeda = (moeda, valor) => ({
'real': 'R$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ".$1,$2"),
'dolar': 'US$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ",$1.$2")
})[moeda]

console.log(formata_moeda('real', 29899.3)) // R$ 29.899,30
console.log(formata_moeda('dolar', 29899.3)) // US$ 29,899.30
console.log(formata_moeda('euro', 29899.3)) // undefined

const formata_moeda = (moeda, valor) => ({
'real': 'R$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ".$1,$2"),
'dolar': 'US$ ' + String(valor.toFixed(2)).replace(/([0-9]{3}).([0-9]{2}$)/g, ",$1.$2")
})[moeda] || 'Moeda não suportada!'

Agora temos um valor default.

console.log(formata_moeda('real', 29899.3)) // R$ 29.899,30
console.log(formata_moeda('dolar', 29899.3)) // US$ 29,899.30
console.log(formata_moeda('euro', 29899.3)) // Moeda não suportada!

def formata_moeda(moeda, valor):
    return {
        'dolar': f'US$ {valor:,.2f}',
        'real': f'R$ {valor:,.2f}'.replace(',', '.')[::-1].replace('.', ',', 1)[::-1]
    }.get(moeda, 'Moeda não suportada!')

print(formata_moeda("real", 29899.3)) # R$ 29.899,30
print(formata_moeda("dolar", 29899.3)) # US$ 29,899.30
print(formata_moeda("euro", 29899.3)) # Moeda não suportada!

def formata_moeda(moeda, valor):
moedas = {
'dolar': f'US$ {valor:,.2f}',
'real': f'R$ {valor:,.2f}'.replace(',', '.')[::-1].replace('.', ',', 1)[::-1]
}

return moedas.get(moeda, ‘Moeda não suportada!’)

Artigo original publicado aqui e gentilmente cedido pelo autor.