top of page
  • Foto do escritorRan Isenberg

Reduza a complexidade do código Python com este truque simples


pexels imagens gratuitas

Como engenheiros, devemos sempre nos esforçar para escrever código simples.

Uma armadilha comum, típica de muitas linguagens de programação, e não apenas do Python, é o horrível uso incorreto do if-elif .

Se você quiser resolver esse problema e melhorar a legibilidade e a manutenção do seu código, continue lendo, este artigo é para você!

 

Caso de uso do manipulador de solicitação

Um sistema de gerenciamento de clientes recebe solicitações.

Tipo de ação de solicitação
Tipo de ação de solicitação

Cada solicitação contém uma ação e um nome de cliente. Ações consistem em criar um novo cliente, ativar um cliente, suspender um cliente e excluir um cliente.

Existem quatro tipos, e cada tipo é tratado de forma diferente.

Cada solicitação é um dicionário Python:

 

Aqui está um diagrama de fluxo potencial que aborda esse caso de uso:

E o código Python equivalente:

Você consegue identificar o problema? Existem muitos if e elifs

que tornam o código mais complexo , menos legível (muito longo!) e mais difícil de manter.

Além disso, para manipular as ações, o código às vezes precisa passar por vários "ses" que não correspondem, o que não é o ideal, pois o número de ações aumenta (complexidade de O(n), onde n é o número de ações).

Felizmente, existe uma solução simples!


Diga não ao If-elif!

Como você pode ver no código abaixo, a seção if-elif foi removida em favor de um dicionário que mapeia cada ação para a função manipuladora correspondente — linha 3, ACTION_MAPPING .

Agora, qualquer manipulador de ação é selecionado imediatamente na linha 18 do dicionário (na ordem média de O(1) ), e o manipulador é chamado na linha 20.

Por exemplo, para uma ação ' ativar ', o _handle_activate_request será selecionado.

Nota lateral: como a entrada é validada na linha 13, a ação sempre é encontrada no dicionário ACTION_MAPPING .

 

Qual é a melhor prática?

If-elif não é maligno; eles são uma parte essencial da linguagem.

No entanto, como em tudo na vida, você não deve exagerar.

Minha regra de ouro é que um if-elif é o suficiente. Se precisar de mais, use o mecanismo de mapeamento de dicionário.

E, por último, use uma ferramenta de scanner de complexidade de código como Radon / Xenon . Elas podem apontar áreas problemáticas e ajudar você a refatorar seu código em uma obra-prima.


Comments


bottom of page