Algumas linguagens como Java e Javascript tem suporte a switch-cases, uma maneira de amarrar condicionais a um valor, como em uma cascata de opções.
switch(x) {
case "value1": // if (x === "value1")
...
break;
case "value2": // if (x === "value2")
...
break;
default:
...
break;
}
Em Python não temos switch-cases mas, frequentemente, utilizamos
if
/elif
/else
s para obter o mesmo resultado. Aqui um exemplo
dessa estrutura em um caso onde determinadas funções devem
ser chamadas a depender do valor:
def to_expense(item):
new_item = {}
for key, value in item.items():
field = citycouncil_expenses[key]
value = value.strip()
if field == "value":
value = currency_to_float(value)
elif field == "excluded":
value = to_boolean(value)
elif field in ("published_at", "date"):
value = from_str_to_date(value)
elif field == "phase":
value = get_phase(value)
new_item[field] = value
return new_item
Uma outra maneira de fazer isso é utilizando dicionários:
def to_expense(item):
functions = {
value": currency_to_float, # métodos a serem executados
"excluded": to_boolean,
"published_at": from_str_to_date,
"date": from_str_to_date,
"phase": get_phase,
}
new_item = {}
for key, value in item.items():
field = citycouncil_expenses[key]
value = value.strip()
new_item[field] = functions.get(field, lambda x: x)(value)
return new_item
No dicionário functions
temos os métodos que precisam ser executados
para determinados campos. A linha functions.get(field, lambda x: x)(value)
busca pelo método; caso não seja encontrado, retornamos uma lambda que
simplesmente retorna o mesmo valor.
A ideia é que o código não tenha uma sequência extensa de if/else
s e
que fique claro o mapeamento entre os campos e os métodos.
Essa foi uma dica bem curtinha. Até a próxima!
comments powered by Disqus