Nomenclatura descritiva vs. 80 linhas de caracteres [fechadas]

17

Frequentemente ouço essas duas práticas valiosas de programação: (1) as linhas de código devem ter 80 caracteres ou menos e (2) usar nomes descritivos para variáveis, métodos, classes etc. Entendo o raciocínio de ambas as palavras de conselho, no entanto , eles costumam ser trocas entre si. Se eu mantiver meu código abaixo de 80 caracteres / linha, acabarei usando nomes menos descritivos (especialmente no Python, em que cada recuo conta com 4 caracteres), mas se eu usar nomes mais descritivos, terminarei com linhas com mais de 80 caracteres.

Então, minha pergunta é qual desses dois conselhos é mais importante a ser cumprida se a escolha deve ser feita? Estou imaginando isso como um programador independente (amador), mas mais importante da perspectiva de um engenheiro de software que trabalha para uma empresa maior.

mjgpy3
fonte
4
@BillyONeal Com telas grandes, 120 :)
BЈовић
4
Eu acho que preciso de pelo menos 130
9dan
8
Prefiro 80, porque posso abrir facilmente 2 arquivos lado a lado no meu notebook.
Honza Brabec
5
Linhas com mais de 80 caracteres tendem a ficar ilegíveis. Então 80 é um bom limite. Descritivo não precisa ser muito detalhado. E isso depende do escopo: nomes de variáveis ​​curtas de escopo pequeno, nomes mais longos de escopo grande. E, por todos os meios, evite variáveis ​​com amplo escopo. Se você usa uma linguagem funcional e quebra seu código em funções menores, quando recua muito fundo -> escopo muito pequeno == nomes de nomes curtos. Os nomes das funções são semelhantes, mas geralmente um pouco mais longos, porque seu escopo é maior.
Peer Stritzinger
4
@ ott--: Você viu um editor que pode realmente quebrar uma linha longa, de acordo com a sintaxe C ++, e apresentar a continuação recuada um nível a mais que o início? Caso contrário, essa sugestão é inútil.
Jan Hudec

Respostas:

34

Mantenha seus travessões poucos, seus nomes descritivos e não tenha medo de quebrar uma linha.

Mantenha seus recuos poucos.

Freqüentemente, quando me encontro em uma luta entre identidades e nomes descritivos, dou um passo atrás e olho para o meu nível de indentação. Se você estiver recuando além de 3 ou 4 níveis (2 níveis são automáticos e inevitáveis ​​em muitas instâncias. Leia: definição de método de classe), convém reestruturar seu código, abstraindo a funcionalidade de uma função ou método.

Seus nomes descritivos

Você deve sempre manter seus nomes descritivos. Os nomes descritivos criam código de auto-documentação. Você pode tentar reduzir os nomes em alguns casos, mas a legibilidade vem primeiro.

Não tenha medo de quebrar uma linha

Merda acontece. Se você tiver mais de 80 caracteres e não conseguir recuperar nenhum espaço na linha - quebre-o. A maioria dos idiomas não se preocupa com quebras de linha; portanto, divida a linha em vários. Não basta escolher um local aleatório. Mantenha as coisas agrupadas logicamente e recue outro nível quando você ultrapassar os limites.

Craige
fonte
3
Deve-se notar que nomes descritivos não são iguais a nomes longos. Evitar a repetição de coisas que podem ser facilmente vistas a partir do contexto e algumas abreviações cuidadosamente escolhidas (apenas para os conceitos muito comuns) pode ajudar bastante em nomes descritivos curtos.
precisa saber é o seguinte
18

Por que não ambos?

Primeiro de tudo, "descritivo" e "detalhado" não são os mesmos. Por exemplo, se você estiver escrevendo um loop local, ié um nome de variável muito bom para a variável de loop; current_iteration_index, embora indiscutivelmente mais descritivo e definitivamente mais detalhado, é muito pior e não adiciona nenhuma informação, porque o uso de icomo variável de loop é praticamente universalmente aceito e não há outro significado para iisso.

Bons nomes de variáveis ​​são descritivos, pois um programador familiarizado com o idioma da linguagem e com as convenções da base de código pode adivinhar com facilidade qual é seu papel, mas também é conciso o suficiente para manter as coisas compactas.

O limite de 80 caracteres, apesar de originalmente ser uma conseqüência das limitações técnicas dos terminais de texto dos anos 70, ainda é valorizado por muitos atualmente, e mesmo que ainda haja razões técnicas (comprimentos máximos de linha em alguns protocolos de rede, principalmente os relacionados a email), as razões mais convincentes são psicológicas e sociais. Acontece que comprimentos de linha em torno da marca de 66 caracteres proporcionam a experiência de leitura mais confortável para a prosa em linguagem natural (o tamanho da fonte interessante não faz muita diferença e, consequentemente, o tamanho da tela ou do papel); Os limites de linha de 80 caracteres são muito próximos disso, mas como a maior parte de um pedaço de código típico geralmente é recuado em pelo menos um ou dois níveis (o que significa entre 4 e 16 caracteres, dependendo das configurações de recuo),

Outro efeito de seguir as linhas de 80 caracteres é que é um bom indicador de quando as coisas são muito complicadas. As linhas longas são geralmente causadas por um dos seguintes:

  • Funções com uma longa lista de argumentos; isso não é uma coisa agradável de se ter, porque eles impedem a legibilidade e podem facilmente causar erros sutis, por exemplo, quando as pessoas trocam a ordem dos argumentos de uma maneira que o compilador não pega.
  • Expressões complexas, freqüentemente encontradas em condicionais (por exemplo if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)); isso também costuma ser bastante difícil de decifrar, e o código deve ser reescrito em algo mais estruturado. Muito provavelmente, a expressão faz muito e deve ser fatorada em um método ou função.
  • Literais longos usados ​​em chamadas ou expressões de função, por exemplo print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));. Mova o literal para uma variável ou constante; ele ainda pode exceder o comprimento da linha, mas se você fizer isso de forma consistente, o leitor poderá pelo menos ignorar com segurança a parte invisível da linha, assumindo que apenas o restante do literal se segue. Ou, melhor ainda, mova os literais para fora do código e entre em um armazenamento de dados externo (arquivo, banco de dados, qualquer que seja).
  • Instruções profundamente aninhadas, por exemplo, seis níveis de ifinstruções em um método de classe (são 32 colunas de recuo para configurações típicas). Novamente, o aninhamento profundo cria um código complexo e de difícil leitura, e deve ser evitado como uma praga - simplificando, o aninhamento profundo transborda a pilha do cérebro humano durante a leitura.

No final, todos esses são sintomas de coisas que você preferiria não ter em sua base de códigos, e impor limites de 80 caracteres é uma maneira simples e agradável que ajuda a manter a complexidade e a legibilidade reduzidas. (Isso não quer dizer que você não pode escrever código perfeitamente ilegível em 80 colunas: os vários concursos de código ofuscado são um contra-exemplo claro).

tdammers
fonte
1
+1: Ótima resposta, exceto que eu não concordo em afastar literais do código. Quando você souber qual literal está procurando, poderá cumpri-la igualmente em recursos ou código, mas quando estiver trabalhando com o código e precisar modificar o literal, ter que procurá-lo em arquivo separado é uma distração. Observe também que todas as linguagens têm alguma maneira de dividir literais em várias linhas, o que eu faria nesse caso.
precisa saber é o seguinte
É claro que a sentença usada como exemplo de literal longo não tem lugar em código-fonte. Coisas assim aparecem nos modelos de página. Mas para coisas como mensagens de erro, prefiro mantê-las com o código que as emite.
precisa saber é o seguinte
@JanHudec: Claro, mover os literais para um arquivo de dados nem sempre faz sentido. No entanto, estou falando de literais excessivamente longos e, com esses, raramente vi uma ocasião em que defini-los em outro lugar tornaria o código ainda pior: o tamanho do texto atrapalha a leitura, enquanto o significado dele pode ser facilmente condensado em um nome constante ou variável, que você define em outro lugar. As mensagens de erro são um julgamento, eu acho.
tdammers
16

A nomeação descritiva é, de longe, mais importante. Na maioria das interfaces, podemos rolar para ver linhas mais longas. Em nenhum caso o sistema pode ajudá-lo a traduzir variáveis ​​e funções com nomes inadequados.

Matt S
fonte
2
Este. Pare de quebrar linhas em caracteres X, deixe o IDE lidar com isso. Caso contrário, você incomodará todos os outros usuários (incluindo o futuro você!), Cujas telas / IDEs podem manipular 2 x caracteres X com código que não cabe mais em uma página.
precisa saber é o seguinte
4
A questão era implicitamente sobre nomes longos . E não concordo que os nomes devam ser longos - na maioria das vezes devem ser curtos . Nomes descritivos e longos podem tornar o código mais difícil de ler do que nomes um pouco menos descritivos, mas mais curtos! (Linhas excessivamente longos são geralmente difíceis de ler.)
Konrad Rudolph
4
Discordo. Se eu não conseguir ver o código de uma vez, é difícil ler, não importa o quão descritivos sejam os nomes.
Jan Hudec
4

80 caracteres por linha não são difíceis de encontrar, mesmo os nomes são longos porque existem muitas maneiras de dividir uma única linha de código longo em vários códigos curtos, por exemplo, eu posso dividir uma declaração de condição em C em várias linhas para caber em menos de 40 personagens,

if ( a == b || c == d  || d == e
    || c == e || c == a || c == k
    || c == l)

você também pode dividir uma linha de chamada de funções em várias linhas também.

Portanto, as regras de nomeação descritiva e as 80 linhas de caracteres não têm contradição, elas podem coexistir para melhorar a legibilidade.

neo
fonte
2
80 caracteres realmente melhoram a legibilidade? Que tela não pode fazer facilmente 120 atualmente?
Billy ONeal
7
@BillyONeal é mais fácil de digitalizar mais de 80 largura de mais de 120 largura
catraca aberração
2
o jornal de notícias se divide
neo
1
A quebra de uma condição lógica melhora a legibilidade quando as quebras de linha correspondem à estrutura da condição, mas não necessariamente se elas correspondem apenas a algum limite arbitrário.
mikołak 18/01
1
@ BillyONeal: a maioria das telas pode fazer 120, mas quase nenhuma pode fazer 240. Ou você nunca compara diffs?
Hubert Kario
0

O limite de 80 é algo que deveria ter sido aumentado há muito tempo. Observe que esse limite é usado desde a idade, quando o comprimento de cada identificador era limitado a 8 caracteres e apenas uma fonte na tela / impressora. Não há possibilidade de alterar o tamanho da fonte.

Deus, agora temos diferentes tecnologias de tela e impressão. Temos linguagens de programação muito diferentes. Não há mais razão para usar 80 caracteres. Aumente para 120 caracteres, pelo menos.

Mesmo assim, não deve ser um limite rígido. Você passa um personagem além da linha? Bem, nada acontece!

Editar:

Respostas detalhadas sobre a história do limite de 80 caracteres

Caracteres por linha na Wikipedia

Um estudo da Universidade Estadual de Wichita descobriu que a CPL teve apenas pequenos efeitos na legibilidade, incluindo fatores de velocidade e compreensão. Quando solicitadas preferências, no entanto, 60% dos entrevistados indicaram uma preferência pelas linhas mais curtas (35 CPL) ou mais longas (95 CPL) usadas no estudo. Ao mesmo tempo, 100% dos entrevistados selecionaram uma dessas quantidades como sendo a menos desejável.

Sulthan
fonte
4
Não, o limite definitivamente não deve ser aumentado. Como não tem nada a ver com a tela e a tecnologia de impressão, apenas o fato de 80 caracteres por linha atingirem o máximo de olhos humanos pode digitalizar confortavelmente (66 caracteres são considerados a largura ideal da linha, menos na impressão em várias colunas). A propósito, o que significa que a maioria dos livros tem um pouco menos de 80 colunas para amostras de código.
precisa saber é o seguinte
3
@JanHudec Tem tudo a ver com a tecnologia de tela / impressão. Consulte programmers.stackexchange.com/questions/148677/… . A decisão de escolher 80 caracteres é puramente histórica, não baseada em estudos. Você poderia adicionar links para estudos para confirmar sua opinião?
Sulthan
Outra pergunta já tem esse link UX em seus comentários; referências adicionais lá. Enquanto o número 80 em si é uma coincidência histórica, é derivado aproximadamente do número de greves por linha nas máquinas de escrever, que foi derivado aproximadamente da largura comum da impressão em coluna única e a média de 66 letras foi uma tradição estabelecida há muito tempo.
Jan Hudec