6.2 Formatação

Neste livro, nós tentamos manter a formatação de código-fonte o mais consistente possível. Isto permite uma melhor leitura e escrita de código-fonte. Definimos o padrão de formatação em três partes.

6.2.1 Julia Style Guide

Primeiramente, nós tentamos aderir as convenções do Julia Style Guide. Mais importante, escrevemos funções e não scripts (veja também Section 1.3). Além disso, usamos convenções de nomenclatura consistente com o módulo base de Julia:

Adicionalmente, evitamos usar parênteses em condicionais, ou seja, escrevemos if a == b ao invés de if (a == b) e usamos 4 espaços para cada nível de indentação.

6.2.2 BlueStyle

O Blue Style Guide adiciona diversas convenções aos padrões do Guia de Estilo de Julia. Algumas dessas regras podem soar pedantes, mas descobrimos que elas fazem o código ficar mais legível.

Do Blue Style Guide, nós aderimos especificamente à:

6.2.3 Nossos incrementos ao Blue Style Guide

6.2.3.1 Carregamento de símbolos

Prefira sempre carregar símbolos de maneira explícita, ou seja, prefira using A: foo ao invés de using A quando não estiver usando o REPL (veja também JuMP Style Guide, 2021). Neste contexto, um símbolo significa um identificado de um objeto. Por exemplo, mesmo que não parece natural, internamente DataFrame, π e CSV são todos símbolos. Podemos averiguar isto se usarmos uma função introspectiva de Julia tal como isdefined:

isdefined(Main, :π)
true

Adjacente de ser explícito no uso de using, prefira também using A: foo ao invẽs de import A: foo porque este último faz com que seja fácil estender acidentalmente foo. Note que isto não é somente aplicável para Julia: carregament implícito de símbolos por from <module> import * também é desencorajado em Python (van Rossum et al., 2001).

A razão da importância de ser explícito está relacionada com versionamento semântico. Com versionamento semântico (http://semver.org), o número da versão está relacionado se um pacote possui ou não mudanças breaking. Por exemplo, uma mudança non-breaking que atualiza o pacote A se dá quando o pacote migra da versão 0.2.2 para 0.2.3. Com tais mudanças non-breaking, você não precisa se preocupar se o seu pacote vai quebrar (break), em outras palavras, dar um erro ou mudar o comportamento de execução. Se um pacote A migra de versão 0.2 para 1.0, então esta atualização é breaking e você provavelmente terá que fazer mudanças no seu código para fazer com que o pacote A funcione novamente. Porém, exportando símbolos extras é considerado uma mudança non-breaking. Então, com carreamento implícito de símbolos mudanças non-breaking podem quebrar seu pacote. Por isso que é uma boa prática apeans carregar símbolos de maneira explícita.



CC BY-NC-SA 4.0 Jose Storopoli, Rik Huijzer, Lazaro Alonso