Black

By | May 30, 2020

Já falei de Python diversas vezes aqui no blog e meu interesse pela linguagem continua a crescer. Estou continuamente estudando, lendo livros, ouvindo podcasts e fazendo cursos.

Existe uma expressão para quando você escreve código utilizando facilidades, convenções, formatação e sintaxe típicas da linguagem: Abordagem Pythonica.

É um termo com uma escopo enorme, mas uma das coisas que gera mais discussão e rivalidade é como formatar o código corretamente.

O Python tem um guia de estilo oficial, definido na PEP8. Algumas grandes empresas também tem seu guia de estilo interno, como o Google por exemplo.

O problema de guias é que sempre existe um pouco de liberdade de interpretação, sempre dá pra adicionar uma regra ou outra no linter pra passar batido. E sempre vai dar pano pra manga discussão de qual a formatação correta para uma linha ou outra numa base de código.

Isso é uma das coisas que eu gosto muito no Go (golang): Existe uma formatação oficial. O binário gofmt automaticamente reformata o seu código e pronto. Não tem discussão. Todos os editores de texto e IDEs que suportam Go rodam gofmt automaticamente no seu código cada vez que você salva.

Eu queria alguma coisa assim pra Python, mas não sabia que já existia. Entra o Black.

Segundo a página do projeto o Black é um formatador cheio de opinião. Não é configurável, não dá pra fazer jogo de regrinhas.

O nome do projeto foi baseado numa frase famosa do Henry Ford:

Any customer can have a car painted any color that he wants so long as it is black.

Ou, em português: “Qualquer cliente pode ter o carro da cor que ele quiser desde que seja preto“.

Você roda o black no seu código e ele reformata do jeito que deve ser. Acabou. Não tem discussão de continuação de linha, espaço antes, depois, aspas simples, aspas duplas…

Pra mim isso é o ideal. Não quero pensar e não quero discutir formatação. Rodo o black e pronto.

Aliás, dá pra integrar o Black em diversos editores de texto. Pessoalmente virei um grande fã do Microsoft Visual Studio Code e aqui tem instruções de como habilitar o black para formatar o código cada vez que você salvar, no melhor estilo gofmt. 🙂

Só pra deixar claro que ainda rodo pylint ou flake8 também. O Black não substitui um linter, mas resolve totalmente a discussão de formatação.

No tag for this post.

4 thoughts on “Black

  1. Renato

    Massa esse carinha, não conhecia, já to enviando pro time a referência. 😀

  2. Wanderley

    Também não conhecia. Uso os que tem disponível para VIM.
    Aliás, fica a dica uso VIM e TMUX para desenvolver. Apesar de existir plugin do VIM para VSCode, não consegui ser tão produtivo nele como sou com o VIM.
    Vou ver se tem esse black para o VIM.
    Happy coding!

  3. Wanderley

    Queria ter comentado no post sobre DevOps, mas os comentários estão fechados.
    Sobre as linguagens concordo em gênero, grau, número e pessoa, principalmente em relação ao Python.
    Mas senti falta de você citar Ansible nesse post sobre DevOps, vc já chegou a utilizar? Se não, vale muito à pena aprender, não só por ser escrito em Python, mas por permitir automação de uma maneira inteligente, fácil e produtiva.
    Grande abraço.

  4. Eri Post author

    Opa! Sou fã do Ansible sim. Atualmente não tenho tido muito uso pra ele já que nosso deployment principal acaba sendo via k8s e usamos EKS, o que dispensa qualquer gerenciamento dos worker nodes. 🙂
    Mas essa semana fiz a mesma coisa duas vezes manualmente. E aí já deu coceira de escrever um playbook né? 😀

Comments are closed.