#00 Conhecendo Python — Código Pythônico

Inaugurando uma nova série aqui no Medium da It Happens (õ/) vou falar ao longo das próximas semanas sobre as funcionalidades e filosofias por trás de uma das linguagens de programação que tem ganhado espaço por aqui na empresa e é uma das minhas preferidas: ❤ Python ❤

Quando eu comecei a estudar a linguagem, uma coisa que eu sempre via no tutoriais era um título nesse padrão bem aqui: “Fazendo algo incrível aqui de forma pythônica”. Na época, eu achava que pythônico era como os programadores chamavam algo escrito em Python, e que isso era um padrão de nome para qualquer linguagem de programação. Tipo, se eu estivesse escrevendo código em Java, eu estava escrevendo código javônico, se fosse em Ruby, rubyônico e se fosse em PHP, lixo.

(pausa para a piada ruim…)

Aí, de uns anos pra cá, eu comecei a estudar mais a fundo o Python e descobri que pythônico não tinha nada haver com que eu tava pensando. Era uma coisa bem mais complicadinha.

Mas e então, você pergunta, o que baralhos é código pythônico ?

Bom, meu jovem, código pythônico é um termo que a comunidade Python usa para se referir a um código elegante do ponto de vista da linguagem. É um código que utiliza os recursos que o Python oferece para tornar a escrita mais concisa e o desempenho, melhor.

O termo fica mais claro se analisarmos a linguagem como uma… linguagem de fato, como o português e o inglês. Cada uma dessas linguagens tem suas peculiaridades e formas de expressão.

Quer ver um exemplo ? Se fôssemos traduzir a seguinte expressão ao pé da letra…

Vamos reservar um quarto no hotel

… para o inglês, teríamos um troço mais ou menos assim:

Let’s reserve a room in the hotel

Que é, teoricamente, entendível. Porém, a versão disso mais comum em inglês, aquela que você ouve por aí muita gente falando, seria…

Let’s book a room in the hotel

Acontece a mesma coisa com linguagens de programação. Se você vem de um background de Java e vai programar em Python como programava anteriormente, você não está utilizando o que a linguagem tem de melhor a oferecer e não está escrevendo um código pythônico. Acho que tá mais para javônico (sacou sacou ?).

Tá. Me mostra uns exemplos de códigos pythônicos, pra eu ver como posso melhorar.

Opa, claro que sim, meu jovem :D

Exemplo 1. Código Não Pythônico

Fora algumas especificidades de Python, o código acima é bem trivial de entender. Estamos apenas criando uma classe com dois atributos e alguns setters e getters. Um padrão bem comum em linguagens como o Java, por exemplo. O código acima funciona perfeitamente.

O único problema é que ele não foi feito de forma pythônica. Estamos implementando o código usando as convenções que o padrão JavaBeam sugere (setCoisa() e getCoisa()) e isso não é muito elegante, se você reparar que cada linguagem tem suas convenções e padrões para projetos.

Poderíamos tornar essa implementação mais pythônica dessa forma:

Exemplo 2. Código Pythônico

No exemplo acima, trocamos as convenções que herdamos do Java e passamos a usar os artifícios que a linguagem Python oferece para manipular objetos de uma forma um pouco mais simples e natural. Quando executamos contato.nome na verdade estamos invocando um método que foi marcado com o decorator property, que indica pro Python, que aquele método deve funcionar como se fosse um atributo do objeto. De forma parecida, criamos alguns métodos marcados como setter, indicando pro interpretador que, quando chamarmos contato.telefone = 'algum numero' por exemplo, estamos invocando aquele método setter relativo a essa propriedade. Pro usuário que manipula a classe, o código parece mais simples, afinal, é como se a gente estivesse apenas atribuindo alguns valores. E para quem escreve uma classe dessa forma, auxilia outros desenvolvedores a entender como aquele código funciona por que ele está utilizando padrões que são comuns em projetos escritos em Python.

Bom gente, é isso. Até o próximo post ;)