Nos artigos anteriores, aprendemos a instalar (parte 1) e configurar (parte 2) os pacotes necessários para tornar o Emacs um ambiente de desenvolvimento integrado para a linguagem de programação Python. Também aprendemos a realizar algumas customizações básicas e onde buscar referências. Nesse artigo, veremos o uso básico do que foi instalado, configurado e aprenderemos a usar seus principais recursos.
Esse é um resumo dos procedimentos que serão realizados:
Note que o resto do tutorial se encontra na parte 1 (link aqui) e parte 2 (link aqui). Também é importante estar ciente de que a customização do seu init file pode interferir nos procedimentos a seguir, se houver alteração de atalhos e/ou falta de pacotes.
Usando Emacs como IDE Python. |
Esse é um resumo dos procedimentos que serão realizados:
- Instalação dos pacotes Python
- Instalação dos pacotes do Emacs
- Configuração básica de preferências
- Configuração básica de atalhos
- Teste das funcionalidades
Note que o resto do tutorial se encontra na parte 1 (link aqui) e parte 2 (link aqui). Também é importante estar ciente de que a customização do seu init file pode interferir nos procedimentos a seguir, se houver alteração de atalhos e/ou falta de pacotes.
Teste das Funcionalidades
Para testar essas funcionalidades, precisamos criar um programa em Python. Execute o comando C-x C-f <diretório-de-sua-preferência>/programa.py RET. Escreveremos um programa que armazena uma lista de números de 2 a 1.000 (intervalo inclusivo), para exibir apenas os que forem primos palíndromos.
Caso não se lembre o que é um número primo:
Então, por definição, um número primo é todo número que é apenas divisível por 1 e si mesmo, exceto o próprio 1 (que só possui um divisor). Ex.: 2, 3, 5, 7, 11, 13...
Caso não se lembre o que é um número primo:
Primo: que só é divisível por si próprio e por 1. (Dicionário Priberam)
Então, por definição, um número primo é todo número que é apenas divisível por 1 e si mesmo, exceto o próprio 1 (que só possui um divisor). Ex.: 2, 3, 5, 7, 11, 13...
Palíndromo: diz-se de palavra, grupo de palavras ou verso em que o sentido é o mesmo, quer se leia da esquerda para a direita quer da direita para a esquerda. (Dicionário Priberam)
Portanto, são números palíndromos o 5, 11, 121, 123.454.321 etc. já que podem ser lidos conforme a definição apresentada pelo dicionário.
Escreva o seguinte trecho de código:
#!/usr/bin/env python3
def is_primo(n):
for i in range(2, n):
if n % i == 0:
return False
return True
Quando for escrever o bloco for, aperte, em seguida, C-c k e veja o bloco de construção sendo autocompletado. Use TAB para prosseguir nas regiões editáveis (regiões verdes).
Exemplo de detecção de não conformidade com PEP8 e autocomplete. |
Note que a checagem de não conformidade com o PEP8 acontecerá toda vez que salvar seu código e o mesmo contiver erros. Nesse caso, o erro acusado foi o E302, porque duas linhas em branco eram esperadas antes da definição dessa função.
Chame a função is_primo() e imprima o resultado passando alguns valores. Use a função C-= para fazer seleções e veja o resultado. Para executar esse código, basta executar o comando C-c C-c em qualquer linha que o mesmo será enviado ao interpretador Python e então exibido em um buffer a parte.
Exemplo de uso do expand-region. |
Note, também, que os erros contidos no código sempre serão expostos pelo verificador instalado.
Agora, criaremos uma outra função para verificar se um número é palíndromo ou não. Uma forma fácil de fazer essa verificação na linguagem é converter o número em string e compará-lo com a string invertida, percorrendo-a de trás para a frente ([::-1]). Você pode usar o comando C-<enter> e ir à definição de uma função e se quiser refatorá-la, pode usar o comando C-c C-e, e então todas as ocorrência daquele objeto (dependendo do escopo) serão afetadas. Para retornar ao local onde C-<enter> foi chamado basta executar M-*.
Exemplo de refatoração e introspecção de código. |
Como já temos nossas funções, resta adicionar docstrings tanto no módulo quanto nas próprias funções. O código ficará assim:
#!/usr/bin/env python3
"""
Módulo que contém funções matemáticas para determinar
se um número é palíndromo e/ou primo.
"""
def is_primo(n):
"""
Função para determinar se um número é primo.
:param: n valor inteiro
"""
for i in range(2, n):
if n % i == 0:
return False
return True
def is_palin(n):
"""
Função para determinar se um número é palíndromo.
:param: n valor inteiro
"""
str_n = str(n); return True if str_n == str_n[::-1] else False
Caso seu código esteja exatamente dessa forma, alguns erros serão acusados porque não está de acordo com o PEP8. Para resolver esse problema é simples, execute o comando C-c C-r f e veja seu código ser formatado automaticamente de acordo com o guia de estilo e codificação supracitado.
Exemplo de autoformatação de código. |
Para navegar entre os erros basta executar os comandos C-c C-n e C-c C-p. Para conferir se ainda há erros existentes em seu código você pode executar C-c C-v.
Agora, não queremos mais visualizar o conteúdo dessas funções, então iremos ocultá-las com o comando C-x C-/. E então, escreveremos um novo módulo que usará essas duas funções.
Você pode usar C-x C-5 para navegar pelo Neotree. O <enter> expande o diretório ou entra em um arquivo e o espaço também assume o mesmo comportamento. Para mudar a raiz use C-c C-c.
O novo módulo se chamará main.py. Caso queira atualizar a árvore basta teclar g.
Uso do Neotree para navegar entre a árvore de diretórios. |
Por fim, basta importarmos o módulo programa e imprimirmos quais números primos são palíndromos de 2 a 1.000. Note que a descrição da função é exibida abaixo da powerline do Emacs quando estamos com o cursor sobre ela.
Demonstração final do uso do Emacs como IDE Python. |
No fim, teremos uma sequência de números primos palíndromos de 2 a 1.000.
E essa foi uma pequena demonstração do que se pode fazer com esse poderoso e extensível editor. Outros pacotes podem ser adicionados a ele e suas características, funções e atalhos também podem ser customizados.
O que você aprendeu
Você aprendeu como:- Executar refatoração de código.
- Realizar autoformatação.
- Usar introspecção de código e muitos outros recursos do que foi instalado e configurado.
Na documentação de cada pacote há mais detalhes, funções e configurações que você pode realizar.
Esse artigo é uma continuação de Transformando Emacs em um IDE Python - Parte 2.
Referências
EMACSWIKI: Novato no Emacs. Disponível em <https://www.emacswiki.org/emacs/NovatoNoEmacs>. Acesso em 15 jan. 2019.
GITHUB. All-the-icons. Disponível em <https://github.com/domtronn/all-the-icons.el>. Acesso em 15 jan. 2019.
GITHUB. Elpy. Disponível em <https://github.com/jorgenschaefer/elpy>. Acesso em 15 jan. 2019.
GITHUB. Emacs doom themes. Disponível em <https://github.com/hlissner/emacs-doom-themes>. Acesso em 15 jan. 2019.
GITHUB. Emacs jedi. Disponível em <https://github.com/tkf/emacs-jedi>. Acesso em 15 jan. 2019.
GITHUB. Emacs neotree. Disponível em <https://github.com/jaypei/emacs-neotree>. Acesso em 15 jan. 2019.
GITHUB. Expand region. Disponível em <https://github.com/magnars/expand-region.el>. Acesso em 15 jan. 2019.
GITHUB. Ropemacs. Disponível em <https://github.com/python-rope/ropemacs>. Acesso em 15 jan. 2019.
GITHUB. Yapf. Disponível em <https://github.com/google/yapf>. Acesso em 15 jan. 2019.
GNU. GNU Emacs. Disponível em <https://www.gnu.org/software/emacs/download.html>. Acesso em 15 jan. 2019.
GNU. EMACS: The Extensible, Customizable Display Editor. Disponível em <https://www.gnu.org/software/emacs/emacs-paper.html#SEC24>. Acesso em 15 jan. 2019.
GNU. My Lisp Experiences and the Development of GNU Emacs. Disponível em <https://www.gnu.org/gnu/rms-lisp.html>. Acesso em 15 jan. 2019.
PYPI. Autopep8. Disponível em <https://pypi.org/project/autopep8/>. Acesso em 15 jan. 2019.
PYPI. Flake8. Disponível em <https://pypi.org/project/flake8/>. Acesso em 15 jan. 2019.
PYPI. Mccabe. Disponível em <https://pypi.org/project/mccabe/>. Acesso em 15 jan. 2019.
PYPI. Pycodestyle. Disponível em <https://pypi.org/project/pycodestyle/>. Acesso em 15 jan. 2019.
PYPI. Pyflakes. Disponível em <https://pypi.org/project/pyflakes/>. Acesso em 15 jan. 2019.
Para citar esse artigo:
Comentários
Postar um comentário