PEP8, organização de imports e boas práticas
Admito, eu não sou o desenvolvedor com o código mais limpo, organizado e que segue as regras de estética e estilo, mas sou um tanto crica quando preciso ler o código alheio.
Quando migrei para o Python, resolvi mudar este meu jeito de ser e li, de cabo a rabo, a PEP8 - Guia de Estulos para código Python (Em inglês, e tradução do PythonBrasil). Ainda hoje luto especificamente contra a não naturalidade de organizar os imports da seguinte maneira:
- módulos da biblioteca padrão
módulos grandes relacionados entre si (por exemplo, todos os módulos de e-mail usados pela aplicação)
- módulos específicos da aplicação
Isto decorre da natureza das minhas tarefas diárias (basicamente tourear camadas de Zope, CMF, Archetypes, Five, Plone, Zope3) nas quais as fronteiras entre o que é específico da aplicação e o que são "módulos grandes relacionados entre si" é uma linha muito tênue...
Ontem, lendo o blog do Kevin Teague, tive um certo alívio quando ele menciona uma discussão ocorrida na lista zope-dev sobre a questão de ordenação de imports e que teve um posionamento claro do Jim Fulton:
PEP 8's rule is silly subjective and generally a waste of time. I'm
not going to waste my time following it.
I sort my imports. Period. This makes from imports come before
regular imports (because f comes before i). I discourage from
imports, so this isn't much of an issue for me except for old code.
Having imports sorted takes very little effort and makes imports
easier to find and duplicated easier to spot. Grouping imports makes
imports harder to maintain and read, especially since groupings are
arbitrary unless they follow package boundaries, and just sorting
imports groups imports by package boundaries.
Em resumo, se o cara que pensou o Zope -- e que foi chefe do GvR -- diz que esta regra da PEP 8 é uma perda de tempo, quem sou eu para discordar? Ok, organizar os imports em ordem alfabética me parece também "bobo" mas como eu não tenho uma idéia melhor...
No fundo, a mensagem aqui é seja coerente no seu código, siga uma regra ou um padrão que possa ser identificado por outros que tentem ler seu código, e não seja tão pep-nazi com relação ao código dos outros.
ps: Se você, como eu, usa o TextMate como IDE, o Kevin disponibilizou um pequeno script que pode ser utilizado como bundle na hora de ordenar os imports. Baixe-o daqui