0

Condicionais não são a solução para tudo!!!

#Python
C
Caio Brone

Quando começamos a programar é muito comum o uso de ifs e loops explicitos, porém quanto mais se aprende a programar isso acaba ficando de lado para outras soluções, que além de interessantes também trazem outros benefícios, como legibilidade, reusabilidade dentre outros.

Pense em um senário que se quer criar uma calculadora.


def calculadora(operacao, num1, num2):
    if operacao == 'somar':
        return num1 + num2
    elif operacao == 'subtrair':
        return num1 - num2
	...


E assim por diante até o fim das operações desejadas, se você quiser adicionar uma nova operação, terá que mexer no corpo da sua função, e vai por mim, depois de pronto não quer mexer mais. Segue a ideia, depois de pronto eu quero plugar funcionalidades, não quero mexer na função, e segue.

Alterar uma função é custoso por que você não sabe onde ela está sendo usada e isso pode trazer efeitos inesperados.

Uma solução bacana seria:


def somar(num1, num2):
    return num2 + num2

def subtrair(num1, num2):
    return num1 - num2

operacoes = {
    "somar": somar,
    "subtrair": subtrair,
}


outra opção aqui é usando expressões lambda, é uma solução que eu gosto bastante, aumenta um pouco a complexida de início, porém traz uma legibilidade interessante ao longo do tempo e reduz a quantidade de código.

operacoes_lambda = {
    "somar": lambda x, y: x+y,
    "subtrair": lambda x, y: x-y,
}

def calcular(num1, num2, operacao):
	return operacoes[operacao](num1, num2)

calcular(5, 5, "somar") # 10


E assim nós definimos uma boa estratégia de como resolver o problema. Agora sempre que se quiser mudar algo basta adicionar ao dict operacoes ou operacoes_lamda a operação que se deseja, em vez de alterar o escopo da função calculadora.

Claro que isso é um exemplo bem simples, mas pode ser aplicado em situações do dia a dia, interessante notar que podemos ter outras funções, por exemplo que verificar se num1 e num2 são realmente números.

Exemplo:


def e_numero(number):
    return isinstance(number, int)


Aqui eu sinto que estou cometendo um crime, geralmente é melhor perdir perdão que permissão, mas pelo bem da explicação vale a pena, para mostrar que o if não precisa ser abandonado.


def calcular(num1, num2, operacao):
    if (e_numero(num1) and e_numero(num2)):
        return operacoes_lambda[operacao](num1, num2)
    return "Os dois valores dever ser numericos..."


A ideia aqui não foi pensar em SOLID, padrões de projeto, claro que acaba vindo, mas o intuito foi mostrar que há bastante coisa além do if. A arte de programar está na criatividade do programador.


E digam suas opniões sobre o que acham da solução...

0
12

Comentários (0)

None

Brasil