PEP8 e Python: Programar é fazer arte

Objetivos:
Conheça as principais recomendações da PEP8 para Python, desenvolvida para ajudar programadores a criar códigos mais claros e compreensíveis.
Recursos e materiais:
Última atualização:
14/09/2020
Aulas do capítulo:

A qualidade de um código não diz respeito somente à sua eficiência computacional. Conforme conversamos ainda em nossa aula sobre o que são algoritmos, um código bem elaborado precisa ser profissional, claro e de fácil entendimento. Na aula de hoje conheceremos a PEP8 e como ela nos ajuda nessa tarefa quando programamos em Python.

PEP8?

Criada ainda em 2001 por Guido van Rossum, Barry Warsaw e Nick Coghlan, a PEP8 (Python Enhancement Proposal 8) é um conjunto de convenções que visa padronizar e uniformizar os códigos escritos em Python, para que eles sejam claros e mais fáceis de compreender.

Segundo Guido van Rossum, um dos criadores da PEP8, “códigos são lidos muito mais vezes do que são escritos”. Outros desenvolvedores poderão ter acesso ao seu código e precisarão ser capazes de compreender e contribuir com o desenvolvimento dele. Em diversas situações, você também precisará acessar códigos antigos que já desenvolveu e relembrar com facilidade a lógica do programa. Em todos esses casos, clareza é fundamental.

Abaixo veremos brevemente as recomendações da PEP8 para os principais elementos que podem afetar a clareza de um código. Não se preocupe caso não conheça alguns dos termos utilizados, como classes, métodos, docstrings e outros. Conheceremos cada um deles à medida em que nos aprofundarmos na programação em Python através de nossas próximas aulas.

Regras para nomes

A maior contribuição da PEP8 talvez seja as recomendações criadas para a nomenclatura de funções, variáveis, métodos e outras estruturas que podemos encontrar em Python. São essas convenções que vão permitir a você e outros programadores bater o olho em um código e identificar imediatamente o que é cada elemento.

A Tabela 1 mostra um resumo das recomendações da PEP8 para nomenclatura:

Convenções da PEP8 para nomenclatura em Python
Tipo Convenção Exemplo
Função Utilize sempre letras minúsculas. Palavras devem ser separadas por underline. funcao, minha_funcao
Variável Utilize sempre letras minúsculas. Palavras devem ser separadas por underline. x, var, minha_variavel
Classe Primeira letra de cada palavra maiúscula. Não separar palavras. Modelo, MinhaClasse
Método Utilize sempre letras minúsculas. Palavras devem ser separadas por underline. metodo, meu_metodo
Constane Utilize todos os caracteres em caixa alta. Palavras devem ser separadas por underline. CONSTANTE, MINHA_CONSTANTE

Sempre que possível, a PEP8 recomenda também dar preferência para nomes que sejam sugestivos. Se você quer armazenar o primeiro e último nome de uma pessoa em duas variáveis, por exemplo, fica muito mais compreensível identificar essas variáveis como “primeiro_nome” e “ultimo_nome” do que utilizar abreviações como “pn” e “un”.

Indentação

Conforme também veremos nas próximas aulas, é através da indentação que Python consegue separar cada um dos blocos de comandos. Por isso, precisamos saber como fazer essa indentação para evitarmos erros ao rodarmos nossos códigos.

A PEP8 nos recomenda utilizar 4 espaços para indentar um comando em relação ao nível de indentação anterior. Essa recomendação é ilustrada no Exemplo 1.

Programa para imprimir 3 vezes o nome de um usuário
1
Linha de comando sem indentação
2
    Linha de codigo indentada em relação à linha 1 (4 espaços)
3
        Linha de código indentada em relação à linha 2 (8 espaços)
4
            Linha de código indentada em relação à linha 3 (12 espaços)

Prefira indentar as linhas do código com espaços, conforme mostrado acima, em vez da tecla “Tab”. O comprimento do espaço inserido com a tecla “Tab” pode variar entre os editores de texto, fazendo com que o código seja apresentado de formas diferentes.

Comentários

Outra forma de obtermos maior clareza em nossos programas é através de comentários ao longo do código para ajudarem a explicar a lógica de funcionamento.

Em Python, comentários são identificados com o símbolo “#” e podem ser utilizados tanto para explicar o funcionamento de uma única linha de código quanto de um bloco de comandos. Para cada uma dessas opções, vejamos quais são as recomendações da PEP8.

Comentários de bloco de comandos:

  1. Indente os comentários no mesmo nível de indentação que o bloco de comandos
  2. Inicie cada linha com o caractere “#” seguido de um espaço em branco
  3. Separe parágrafos com uma linha de comentários em branco

Comentários de linha:

  1. Escreva o comentário na mesma linha a que ele se refere
  2. Separe a linha de código por dois ou mais espaços antes de iniciar o comentário
  3. Utilize um espaço em branco após o caractere de comentário “#”

Fica mais fácil compreendermos essas sugestões ao olharmos os exemplos a seguir.

Comentários de bloco de comandos.
1
# Parágrafo 1 comentando algum detalhe sobre o funcionamento do código
2
# Continuação do parágrafo 1
3
# Continuação do parágrafo 1
4
#
5
# Parágrafo 2, separado do parágrafo 1 por uma linha de comentário em branco
6
# Continuação do parágrafo 2
7
8
# Comentário explicando um bloco de comandos
9
bloco de comandos
10
11
def minha_funcao():
12
    # Comentário explicando o bloco de comandos indentado
13
    Bloco de comandos indentado
Comentários de linha.
1
linha de código    # Comentário sobre a linha de código
2
linha de código    # Comentário sobre a linha de código
3
4
def minha_funcao():
5
    linha de código    # Comentário sobre a linha de código
6
    linha de código    # Comentário sobre a linha de código

Vale mencionarmos que comentários em excesso podem ter o efeito contrário do que desejamos e acabar poluindo o código. Dessa forma, garanta que os comentários que você adicionar são necessários e que eles não explicam linhas de código muito básicas.

Comprimento máximo e quebra de linha

Para facilitar o trabalho do desenvolvedor, a PEP8 também recomenda que cada linha de código tenha no máximo 79 caracteres. Esse valor foi escolhido para ser grande o suficiente para evitar quebra da maioria das linhas do programa e ao mesmo tempo pequeno para permitir ao programador abrir duas ou mais janelas de código, uma do lado da outra.

Python é capaz de compreender automaticamente a quebra de linha se o código estiver entre parênteses, colchetes ou chaves. Nesses casos, basta você continuar o comando na linha seguinte. Porém, para permitir ao programador destacar que aquela linha de código é continuação da linha anterior, a PEP8 nos oferece duas opções de indentação:

  1. Indente as quebras de linha com base no parêntese, colchete ou chave de abertura
  2. Faça a indentação com 4 espaços se a linha imediatamente a seguir for vazia ou um comentário ou com 8 espaços se imediatamente a seguir vier uma linha de código indentado.

Para que possamos compreender melhor essas opções, vejamos o Exemplo 4. Fica a critério do programador decidir qual formato escolherá em seus códigos.

Quebras de linha em sequências de dados.
1
# Alinhamento pelo pelo delimitador de abertura: (, [, {
2
resultado = minha_funcao(primeiro_argumento, segundo_argumento,
3
            terceiro_argumento, quarto_argumento)
4
5
# Alinhamento com 4 espaços em relação ao nível de indentação anterior
6
    resultado = minha_funcao(
7
    primeiro_argumento, segundo_argumento,
8
    terceiro_argumento, quarto_argumento)
9
10
# Alinhamento com 8 espaços em relação ao nível de indentação anterior
11
def minha_funcao(
12
        primeiro_argumento, segundo_argumento,
13
        terceiro_argumento, quarto_argumento):
14
    bloco de comandos

No caso de escolhermos a segunda opção, a PEP8 nos oferece também a possibilidade de colocarmos os delimitadores (parêntese, chave e colchete) que fazem o fechamento da sequência de dados na linha seguinte, alinhados com os espaços em branco ou com o primeiro caractere do comando. Essas opções são ilustradas no Exemplo 5.

Alinhamento do delimitador de fechamento da sequência de dados.
1
# Delimitador de fechamento alinhado pelos espaços
2
minha_lista = [
3
    1, 2, 3,
4
    4, 5, 6,
5
    ]
6
7
# Delimitador de fechamento alinhado pelo primeiro caracter do comando
8
minha_lista = [
9
    1, 2, 3,
10
    4, 5, 6,
11
]

Espaços em branco

Outro fator que pode impactar diretamente na legibilidade de um código é a quantidade de espaços e linhas em branco. Dessa forma, a PEP8 também faz recomendações sobre a utilização desses elementos, conforme resumido a seguir:

  1. Utilize 2 linhas em branco para separar classes e funções de nível superior e 1 linha em branco para separar métodos.
  2. Separe as seções do código que tenham funções diferentes por linhas em branco (não exagerar na quantidade).
  3. Utilize espaços em branco para comunicar a ordem de prioridade de operações aritméticas, relacionais e lógicas. Uma ilustração de alguns casos são apresentados no Exemplo 6.
  4. Evite espaços em excesso dentro de parênteses, colchetes e chaves. Utilize espaços apenas para indentação em quebras de linha ou, conforme mostrado no Exemplo 7, após as vírgulas se elas forem seguidas de algum dado.
Recomendações de espaços em operações aritméticas.
1
# Recomendado
2
y = x**2 + 5
3
z = (x+y) * (x-y)
4
5
# Não recomendado
6
y = x ** 2 + 5
7
z = (x + y) * (x – y)
Recomendações de espaços em sequências de dados.
1
# Recomendado
2
x = [1, 2, 3]
3
x = [1, 2, 3,]
4
5
# Não recomendado
6
x = [ 1, 2, 3 ]
7
x = [1, 2, 3, ]

Strings

A última convenção da PEP8 que veremos nessa aula diz respeito às strings. Em Python, strings podem ser criadas utilizando tanto aspas simples quanto duplas. Sempre que possível, utilize-as de acordo com as sugestões abaixo:

  1. Utilize cotações duplas sempre que dentro da string houver apóstrofo (‘) ou aspas simples (”).
  2. Utilize aspas duplas para strings de 2 ou mais linhas. A quebra de linha dessas strings pode ser realizada com a barra invertida “\”.

O Exemplo 8 ilustra a aplicação dessas recomendações.

Recomendações para criação de strings.
1
# String com aspas simples
2
nome = ‘Mecatrônica 100%’
3
4
# String com apóstrofo
5
mensagem = “Como disse Júlio César ‘Veni, vidi, vici’.”
6
7
# String com duas ou mais linhas
8
mensagem = “Investir no movimento maker é impactar positivamente na educação” \
9
    ” e proporcionar o desenvolvimento de habilidades empreendedoras!”

Uma terceira forma de criação de strings em Python é através da utilização de 3 aspas duplas. Essa forma é recomendada para docstrings, strings utilizadas para explicar o funcionamento de um código, classe, método ou função.

PEP8 e Python: Consistência é a chave

Você já deve ter observado que mesmo com as convenções da PEP8, temos mais de uma opção para algumas situações de layout dos nossos códigos em Python. Por isso, o mais importante é sermos consistentes. Não importa qual das recomendações da PEP8 você ou sua equipe prefiram adotar em um projeto. Apenas se certifiquem de que todos irão seguir o mesmo padrão.

E porque programar em Python é fazer arte?

Talvez você nunca tenha parado para pensar, mas programar é fazer arte. É expressar toda a imaginação e habilidade criativa para resolver um determinado problema. Embora algumas pessoas possam argumentar dizendo que não há beleza em linhas de código, como um programa aplicado para resolver algum problema prático da sociedade pode não ser considerado belo?

Porém, diferentemente de outras formas de arte em que cada pessoa tem uma interpretação própria do que o artista queria transmitir, ao programarmos, precisamos ser claros e objetivos. Python já é uma linguagem que se destaca pela simplicidade e a PEP8 nos ajuda a tornarmos nossos códigos ainda mais amigáveis e bonitos.

Utilize esta aula como referência e volte a ela sempre que julgar necessário. Se aparecer alguma dúvida, estaremos à disposição para ajudar.

Se você quer aprender a fazer arte, continue com a gente que nas próximas aulas aprenderemos tudo sobre programação em Python. Cadastre-se gratuitamente em nosso blog caso ainda não o tenha feito para que possamos lhe manter atualizado sobre essas e outras novidades. Não perca a oportunidade de se tornar um expert em programação.

Referências bibliográficas

A. Gaspar, “PEP 8 – Guia de estilo para código Python”.Online. [Acesso em 11 Setembro 2020];
J. Hsu, “A Five-Minute Introduction to Python’s Style Guide: PEP 8”.Online. [Acesso em 11 Setembro 2020];
J. Finer, “How to Write Beautiful Python Code With PEP 8”.Online. [Acesso em 11 Setembro 2020];

Deixe um comentário

%d blogueiros gostam disto: