Como você usa linhas em branco no seu código?


31

Já houve algumas observações sobre o espaço em branco na discussão sobre posicionamentos de chaves.

Eu próprio tendem a borrifar meu código com linhas em branco, na tentativa de segregar coisas que se juntam em grupos "lógicos" e, espero, facilitar a próxima pessoa a ler o código que acabei de produzir.

Na verdade, eu diria que estruturo meu código como escrevo: faço parágrafos, não mais do que algumas linhas (definitivamente menores que 10), e tento tornar cada parágrafo independente.

Por exemplo:

  • em uma classe, agruparei métodos que andam juntos, enquanto os separo por uma linha em branco do próximo grupo.
  • se eu precisar escrever um comentário, normalmente colocarei uma linha em branco antes do comentário
  • em um método, faço um parágrafo por etapa do processo

No geral, raramente tenho mais de 4/5 linhas agrupadas, o que significa um código muito esparso.

Não considero todo esse espaço em branco um desperdício, porque na verdade eu o uso para estruturar o código (como na verdade eu uso o recuo) e, portanto, acho que vale a pena o espaço de tela necessário.

Por exemplo:

for (int i = 0; i < 10; ++i)
{
    if (i % 3 == 0) continue;

    array[i] += 2;
}

Considero que as duas afirmações têm objetivos distintos e claros e, portanto, merecem ser separados para torná-lo óbvio.

Então, como você realmente usa (ou não) linhas em branco no código?


6
if (i % 3 != 0) { <newline here> array[i] += 2; <newline here> }, Mas eu vejo o seu ponto :)
Merlyn Morgan-Graham

Esses tipos de perguntas não são construtivas . Existem tantas vezes que você pode reformular as duas únicas respostas disponíveis de "sim" e "não".

1
Uma pergunta melhor teria sido como e por que você usa linhas em branco? Uso linhas em branco exatamente da mesma maneira que você, com a mesma motivação.
Dominique McDonnell

1
@ Mark, @ takeshin: desculpe, esqueci o "como" na palavra-chave. É óbvio que todos nós os usamos, eu estava tentando ver como era usado por pessoas lá fora (separando classes, if / else, etc ...), mas parece que recebi respostas muito genéricas: p
Matthieu M.

3
for (int i = 0; i < 10; i += 3) { <newline here> array[i] += 2; <newline here> }mas eu vejo o seu ponto :)
Berin Loritsch

Respostas:


87

Sempre

Espaço em branco é crucial para limpar código legível. Uma linha em branco (ou duas) ajuda a separar visualmente os blocos lógicos de código.

Por exemplo, no capítulo Code Complete, Second Edition , de Steve McConnell, sobre Layout e estilo:

Os indivíduos obtiveram uma pontuação de 20 a 30% mais alta em um teste de compreensão quando os programas tinham um esquema de indentação de dois a quatro espaços do que quando os programas não tinham indentação.O mesmo estudo constatou que era importante não enfatizar nem enfatizar demais a estrutura lógica de um programa. Os menores escores de compreensão foram alcançados em programas que não eram recuados. A segunda mais baixa foi alcançada em programas que usavam recuo de seis espaços. O estudo concluiu que o recuo de dois a quatro espaços era ideal. Curiosamente, muitos sujeitos do experimento achavam que o recuo de seis espaços era mais fácil de usar do que os recuos menores, mesmo que suas pontuações fossem mais baixas. Provavelmente porque seis recuos espaciais parecem agradáveis. Mas, independentemente da aparência, o recuo de seis espaços acaba sendo menos legível. Este é um exemplo de colisão entre apelo estético e legibilidade.


12
Eu posso ouvir alguém dizendo "mas então você deve extrair o método!". Um parágrafo é para quando não há razão suficiente para extrair o método.
Frank Shearar

1
É fácil experimentar e ver se é melhor ter espaço em branco vertical ou não. Pegue um arquivo de origem desconhecido para você, remova todas as linhas em branco e tente seguir a lógica. Mesmo com uma indentação adequada, será mentalmente exaustivo, porque linhas em branco nos dão a chance de ver as coisas em pedaços pequenos. Estou tendo que manter um código que não use muito espaço em branco vertical ou recuo, então adicioná-lo foi uma das minhas primeiras tarefas de autopreservação.
the Tin Man

2
Eu concordo 100%. Espaço em branco é útil quando é usado para dividir deliberadamente o código em blocos lógicos. No entanto, o espaço em branco por causa do espaço em branco é tão ruim quanto nenhum espaço em branco. Um ex-colega gostava de colocar uma ou mais linhas em branco após quase todas as linhas do código real. Passei uma quantidade ridícula de tempo "refatorando" que envolvia bater no Backspace alguns milhares de vezes para remover linhas em branco inúteis.
quer

Adicionei alguns dados para apoiar sua posição. Veja: meta.programmers.stackexchange.com/questions/1109/…
Jeff Atwood

2
Que os dados não diz nada sobre as linhas em branco, apenas cerca de recuo ..
Blorgbeard


13

Sim, mas certifico-me de documentá-lo colocando

(This line intentionally left blank.)

na linha


1
Linhas brancas com comentários podem tomar a atenção do código
JulioC

1
Há muitos comentários dizendo "Esta linha foi deixada intencionalmente em branco" ... Você não pode assumir que se uma linha estiver em branco, é intencional ou não teria passado na revisão de código?
alternativa

43
Talvez seja só eu, mas eu assumi que o OP está brincando ...
JSB ձոգչ

7
Há quanto tempo você trabalha para a IBM?
Guillaume

12

Sim, mas não abusei.

Eu vi código em que todas as linhas de código dentro de um método são separadas por uma linha em branco e duas linhas em branco são usadas onde ocorre uma separação lógica. Isso apenas torna ainda menos legível na minha opinião. Eu também vi espaços em branco usados ​​para fazer alinhamentos malucos, como este:

//Prot.   Return type                    Name                 Arg1        Arg2
//=====   ============================== ==================== =========== ========

private   int                            AMethodWithALongName(string s,   object o)
{
    ...
}

private   IDictionary<MyLongObject, int> SomethingCrazy      (string s)
{
    ...
}

protected void                           Foo                 (string str, object o)
{
    ...
}

O mesmo uso indevido do espaço em branco horizontal pode ser aplicado ao espaço em branco vertical. Como qualquer ferramenta, use-a com sabedoria.


1
Parece algo que seria usado em um curso universitário de nível introdutório para direcionar alguns conceitos. Isso foi realmente usado em um ambiente profissional?
Rjzii 6/11

1
@ Rob: Foi usado no código de produção de um sistema grande, mas sem o cabeçalho do comentário, e com corpos de métodos grandes o suficiente para que o alinhamento me intrigasse, pois eu não conseguia ver outras assinaturas de método nesse arquivo. Quando eu derrubei os corpos dos métodos, pude ver a "razão" do espaço em branco.
Allon Guralnek

Isso pode funcionar em um arquivo de cabeçalho ou interface
Ming-Tang

Portanto, o cara que escreveu esse esquema de indentação, quando adicionou um novo método a uma classe e o tipo de retorno do método era mais longo que qualquer um dos tipos de retorno existentes, ele tabularia novamente a indentação de espaço em branco para todos os outros métodos no classe?
Mike Clark

@ Mike, no ensino médio, usamos um livro de programação Java (não consigo lembrar o título) que, sabiamente, aconselhava a nunca usar espaçamento horizontal como esse, simplesmente porque acaba desperdiçando grandes quantidades de tempo quando você deve fazer essas recapitulações.
Matthew Flaschen

5

Sou muito criticado por escrever meu código dessa maneira. Não entendo por que alguém não faria dessa maneira.

Legibilidade é tão importante quando você volta a um projeto após um longo período de tempo e ouvi um ditado "Sempre escreva código se o próximo cara que estiver lendo isso for um psicopata que conhece sua localização".


A suposição que você está fazendo é que descomprimir seu código ajuda na legibilidade, e eu não acho que isso seja sempre um dado.
Jason Baker

O que Jason disse. Quando estou voltando para uma base de código, gosto de ter o maior número possível de LOCs por tela, para poder digeri-lo rapidamente. Se alguém colocar meia página em branco (ou se Deus proibir um desses terríveis comentários em estilo xml), eu ficaria muito tentado a reformatá-lo temporariamente apenas para lê-lo, e undoalgumas vezes para fazer o trabalho (as guerras de formatação não não leva à produtividade, por isso não excluo completamente os comentários e os espaços em branco, mas minha preferência é contra eles na maior parte).
Inaimathi

Uma parede de texto é quase impossível de ler, muito menos a psicologia humana tende a resistir a ela. Acho que reservar um tempo para agrupar declarações semelhantes, agrupar linhas de código que manipulam a mesma variável também é bom. Eu acho que é tudo preferência, mas acho que qualquer coisa feita neste negócio nunca deve ser feita rapidamente.
Bryan Harrington #

5

Nem sempre escrevo software, mas quando escrevo, uso linhas em branco para maior clareza.


4
Também costumo escrever hardware e depois imprimi-lo. É muito mais barato.
Tim Post

5
Piada Dos Equis?
paperjam

@ Tim Na verdade, não é tão engraçado: impressão 3D ;) (E ... seja legal, não somos todos falantes nativos de inglês aqui :).
takeshin

1
@takeshin Eu não estava zombando de ninguém, e eu estava fazendo alusão à impressão 3D. Embora sim, o comentário foi feito de brincadeira, acho que você pode estar interpretando mal a intenção :) Além disso, o fato de o @Paperjam ter comentado uma piada sobre impressão é .. bem .. não tem preço :)
Tim Post

Eu não escreve software, mas o conecta.
mlvljr

5

Eu sou a favor de tornar o código o mais claro possível, e o espaço em branco geralmente é uma ferramenta útil nesse esforço. Mas não vamos esquecer a refatoração:

  • em uma classe, agruparei métodos que andam juntos, enquanto os separo por uma linha em branco do próximo grupo.

Como você tem vários membros relacionados, eles são candidatos a uma nova classe.

  • se eu precisar escrever um comentário, normalmente colocarei uma linha em branco antes do comentário

Sempre que o código não é claro o suficiente para querer um comentário, pergunto se posso refatorar para torná-lo claro o suficiente para não precisar do comentário.

  • em um método, faço um parágrafo por etapa do processo

Por que não criar um método para cada "parágrafo"?

Se você acabar com vários métodos em sua classe, veja minha nota acima sobre como extrair uma nova classe.


5

Sim. Isso facilita a verificação visual de um arquivo. Entre outras coisas, fica mais claro com qual linha um comentário se encaixa.

Some code here
// Which line does this comment go with?
More code here

// It's pretty clear which line this comment goes with
More code here

Still more code here

4

Uso linhas em branco com moderação e consistência, e consistentemente é mais importante do que com moderação. Contudo:

  • Se cada linha de código for separada da seguinte por uma linha em branco, há muitas linhas em branco.
  • Se não há rima nem razão prontamente discerníveis para onde as linhas em branco são colocadas, elas são uma distração e geralmente há muitas delas.
  • Se uma função é tão grande que precisa de muitas linhas em branco, é muito grande.
  • Se um bloco de código precisar de mais de uma linha em branco antes ou depois dele, há algo seriamente errado.
  • Se você tiver mais de duas linhas em branco entre as funções, provavelmente terá muitas linhas em branco.

A maior parte disso não é terrivelmente controversa; o que se segue pode ser. Observo que a notação K&R com chaves abertas no final da linha é deprimente frequentemente seguida por uma linha em branco. Pessoalmente, não gosto dos aparelhos no final da linha e misturo isso com uma linha em branco após o aparelho fazer um absurdo da notação (IMNSHO). Coloque a chave aberta na próxima linha, por si só, e você terá uma linha principalmente em branco (e, IMNSHO, código mais legível). Se você precisar usar a cinta K&R no final da linha, não desperdice o espaço vertical economizando com linhas em branco estranhas.

// I don't like this
if (something == anotherthing) {
    print ...
    update ...
}

// I much prefer this
if (something == anotherthing)
{
    print ...
    update ...
}

// I loathe this - not least for its inconsistent spacing
if (something == anotherthing) {

    print ...
    update ...
}

// I loathe this too, for its absurd waste of vertical space
if (something == anotherthing) {

    print ...
    update ...

}

3

Escreva o que é mais legível e menos surpreendente.

function validEmail($addr) {
    $regex = "/.../";   
    return preg_match($regex, $addr);
}

Esta função não precisa de 12 linhas de comentários do documento.

De fato, não precisa de comentários.

Ou linhas em branco.

Eles prejudicariam sua essência.


1
Um comentário no topo descrevendo quais endereços são aceitos seria bom. Uma expressão regular pode realmente ser usada para validar um endereço de email?
kevin cline

3

Dentro da função? Raramente

Se eu tiver um bloco claro e diferente, ele será refatorado para uma nova função. Se poucos casos não valem a pena.

Para mim, as linhas em branco na função são uma das "melhores práticas" erradas.


2

Frequentemente

Use-o para blocos lógicos de código que são processados ​​de maneira semelhante. Depois de adicionar um comentário para mostrar que você está executando uma etapa diferente - é hora de Extrair o Método.

Bom espaço em branco

{
    int x = computeX();
    x += ADJUSTMENT_FACTOR_X;

    int y = computeY();
    y += ADJUSTMENT_FACTORY_Y;

    setPosition(x, y);
}

Espaço em branco inválido

{
    //Open a connection
    String serverAddress = lookupAddress();
    Connection connection = openConnection(serverAddress);
    connection.login(user, password);


    //Go get stuff from the server
    item1 = connection.get(1);
    item2 = connection.get(2);

    //Close connection
    connection.close();

    //log data
    log(item1);
    log(item2);

    //Update client
    gui.updateView(item1, item2);        
}    

vs

{
    Connection connection = openConnection();
    updateData(connection);
    closeConnection(connection);
    logUpdate();
    updateGui();
}

vs

{
     updateDataFromServer();
     logUpdate();
     updateGui();
}

4
Suponho que seu exemplo de espaço em branco inválido seja uma versão abreviada do que deve ser considerado ruim. No seu tamanho atual, parece desnecessário dividi-lo.
Allon Guralnek 6/11/10

1
Eu não vejo por que ruim é ruim, nem por que você escreveu VS

5
Nenhuma dessas observações são necessários de qualquer forma, e por que o mundo seria um extrato connection.close()paracloseConnection(connection)
alternativa

Um bloco de código com um comentário é melhor que um método extraído, desde que os blocos sejam curtos e poucos. A extração de métodos não é gratuita; tem um custo de localidade do código.
Craig Gidney

E você acabou de fazer item1e item2variáveis globais que os métodos de comunicar através? Ick!
TMN

2

Não apenas uso espaços em branco, como chaves para maior clareza.

Aparelho que uso para dizer que essas podem ser potencialmente funções.

code
{
    code
    code
    code
    code
}
{
    code
    code=code
    code
    code

    code()
    code()
}

2

Ao mesmo tempo, eu espalhava linhas em branco liberalmente em todo o meu código. Atualmente, eu tendem a ser mais poupadores. Eu acho que isso faz parte do que Steve Yegge estava falando aqui :

Espero que a cena que eu pintei até agora o ajude a entender por que às vezes você olha o código e o odeia imediatamente. Se você é um n00b, verá um código experiente e dirá que é uma porcaria impenetrável e indisciplinada, escrita por alguém que nunca aprendeu o essencial da engenharia de software moderna. Se você é um veterano, vai olhar para o código n00b e dizer que é um comentário ornamental excessivamente comentado que um estagiário poderia ter escrito em uma única noite de bebedeira.

O ponto de discórdia é a tolerância à compressão. À medida que você escreve código em sua carreira, especialmente se ele abrange idiomas e domínios de problemas muito diferentes, sua tolerância à compactação de código aumenta. Não é diferente da progressão da leitura de livros infantis com texto gigante para romances cada vez mais complexos com texto menor e palavras maiores.

...

Um programador com alta tolerância à compactação é realmente prejudicado por uma tela cheia de histórias. Por quê? Porque, para entender uma base de código, você deve poder incluir o máximo possível dela em sua cabeça. Se for um algoritmo complicado, um programador veterano deseja ver tudo na tela, o que significa reduzir o número de linhas em branco e comentários em linha - especialmente comentários que simplesmente reiteram o que o código está fazendo. É exatamente o oposto do que um programador n00b deseja. O n00bs quer se concentrar em uma declaração ou expressão de cada vez, afastando todo o código ao seu redor, para que possam se concentrar, chorando alto.

Eu concordo fundamentalmente com ele. É muito melhor compactar o código para que você possa obter o máximo possível em uma tela do que espaçá-lo demais. Isso não quer dizer que você nunca deve usar linhas em branco. Acho que, a menos que o agrupamento que você está tentando criar não aumente imensamente a legibilidade, isso causa mais mal do que bem.


2

Um professor emérito deu dois grandes conselhos

  1. O espaço em branco é gratuito
  2. Não use os grampos que aparecem na frente do papel, ou eu falharei com você.

1

Minhas regras de ouro são estas:

  1. Se tiver problemas para ler o código que escrevi ontem, provavelmente preciso extrair um método ou três.

  2. Se minha definição de classe for muito longa para ser lida com facilidade, provavelmente preciso extrair um módulo / interface / objeto.

  3. Definições de método: adicione uma linha

  4. Definições de módulo / classe: adicione duas linhas


1

Eu gosto de pensar em espaços em branco da mesma maneira que em parágrafos. Você agrupa linhas que contribuem para uma ideia.

Se você está iniciando uma nova idéia ou uma nova faceta da mesma idéia, inicia um novo parágrafo - assim.

No código imperativo, agrupo tarefas que realizam uma tarefa coesa; no código declarativo, agrupo o código que descreve uma afirmação coesa de uma ideia.

Você claramente não tem problemas em fazer isso em inglês (algumas pessoas são horríveis com parágrafos); portanto, com um pouco de prática, aplicar a mesma habilidade ao código não deve ser muito difícil.


1

Linhas em branco são uma obrigação na minha opinião. Eu os uso para separar diferentes blocos lógicos de código. Torna o código legível. Código legível é um bom código;)

Meu código ideal seria cada bloco lógico sendo separado por uma linha em branco e um comentário no topo de cada bloco que tenha uma lógica principal.

Obviamente, se as pessoas fazem isso adicionando várias linhas em branco em todos os lugares, acho isso muito irritante :(


1

Eu só uso espaços em branco em uma função / método para separar declarações e código.

Se você sentir a necessidade de ter algumas linhas para separar sub-blocos de código implementando alguma lógica, eles devem estar em outra função / método privado. Cabe ao seu compilador não sobrecarregar muito.

normalmente, no código peusdo:

def function(arg1, argn, ...)
    INITIALIZERS

    CODE
    BLOCK_START
        INITIALIZERS

        CODE
    BLOCK_END
    CODE
end

Se vejo espaços em branco inúteis, geralmente me encolho.


Isso parece C-ish, meu C ++ Coding Standard recomenda NÃO declarar um objeto sem inicializá-lo, o que impede esse uso: /
Matthieu M.

@ Matthieu M: OK, depois substitua as DECLARAÇÕES por INICIALIZADORES. Mas nunca quero ver os inicializadores no meio de um quarteirão. Se for necessário, é algo que requer um escopo menor; portanto, ele precisa de um método / função particular.
haylem

0

O espaço em branco é extremamente valioso.

Aqui está o negócio ... os nerds que escrevem código complicado como E = MC 2 são ótimos em mostrar suas habilidades de programação.

Agora vamos avançar seis meses, e são 2:00 da manhã e o sistema que não foi examinado em seis meses quebrou na linha E = MC 2 . Isso é quase impossível de depurar ... todo mundo está enlouquecendo.

Suponha que o código se pareça mais com isso ...

See Dick
See Jane
See Dick and Jan

Se for 02:00 e o código estiver quebrado. Uma rápida olhada mostrará que a linha três deveria ter sido

See Dick and Jane

Problema resolvido.

Bottom Line ... use espaço em branco.


1
Erm ... nenhum desses exemplos realmente confirma seu argumento. Pessoalmente, acho que E = MC2 é mais legível do que E = MC 2 (a linha inferior era usar espaço em branco, certo?). Ah, e a menos que você ainda esteja no ensino médio, tenho certeza de que pode encontrar uma maneira melhor de se referir a pessoas com quem você discorda do que a "nerds".
Jason Baker

@ Jason - Bom ponto má escolha de palavras. E = MC2 é muito mais legível, esse não era o ponto que eu estava tentando entender. É mais como você estava falando em seu site YAGNI e SYNDI. jasonmbaker.com/tag/programming
Michael Riley - AKA Gunny

0

Como muitos outros declararam, as linhas em branco facilitam a leitura do código. No entanto, existem alguns idiomas que impõem esse padrão. Um que eu consigo pensar em cima da minha cabeça (não muito sobre linhas em branco, mas recuo adequado) é Python.


0

Eu concordo, eu uso espaços em branco da mesma maneira. No entanto, se eu me encontrar usando espaço em branco para dividir um método em muitas partes, é um sinal de que talvez seja necessário refatorar esse código em vários métodos. Muitas seções lógicas em um método podem sinalizar que o método será mais difícil de testar.


0

Eu os uso para separar o código em unidades lógicas. Eu já vi muito poucos exemplos de código que não usavam linhas em branco, é claro que a ofuscação é excetuada.


0

A resposta do psicopata é a melhor, mas eu a substituiria por assumir que a próxima pessoa é uma idiota, e que ela assumirá que você é e você desejará provar que está errada.

Tão importante quanto a legibilidade é o uso de comentários. Abro cada função ou sub-rotina com um bloco de comentários, explicando em texto não criptografado, o que é, o que faz, quais são os argumentos e quais são os resultados esperados (incluindo uma lista de condições de erro). Então não há dúvida sobre o que se destina e / ou se destina a fazer. O que ele alcança pode variar, mas isso é mais adiante.

Eu acho que muitos codificadores assumem que serão eles mesmos que farão "reparos" no código ou simplesmente não se importam.


0

Linhas em branco são importantes. No entanto, desperdiçar uma linha em branco inteira na chave de abertura reduz a quantidade de código que você pode ver em uma tela. Deveria estar:

for (int i; i < 10; ++i)
{  if (i % 3 == 0) continue;

   array[i] += 2;
}

(Não comece a colocar a chave '{' na mesma linha que a 'for' ... isso é meshuggah).


2
SIM. Eu quero ver toda a sua função em uma tela. Não coloque a chave de abertura na sua própria linha. É para isso que serve o recuo.
precisa saber é o seguinte

O ponto principal de uma chave em sua própria linha é definir claramente os blocos de código. Adicionar uma linha de código após a chave está arruinando a única razão pela qual essa religião é mantida! Você também pode colocá-lo na mesma linha que o 'for'.
Página Inicial>

0

Sim. Para legibilidade. Às vezes até coloco linhas em branco no código que não escrevi. Acho mais fácil entender o código quando eles têm um agrupamento lógico por meio de linhas em branco - como se você pudesse "ler rapidamente" através dele.


0

Devemos usar linhas em branco entre os bloqueios de código, como fazemos quando escrevemos uma carta.

Por exemplo, entre funções, ou dentro de uma função quando finalizamos um loop ...

As pessoas agradecerão um código limpo se tiverem que fazer manutenção nele;)


0

Usamos o espaço em branco recomendado pelo Microsoft StyleCop. Além da legibilidade e consistência, descobri que (junto com turmas pequenas) o código adequadamente organizado facilita muito o gerenciamento de mesclagens quando várias pessoas de uma equipe trabalham nas mesmas áreas.

Não tenho certeza se é apenas minha imaginação, mas as ferramentas diferentes parecem fazer um trabalho melhor em reconhecer onde um código equivalente inicia e termina quando se mescla quando é organizado de maneira organizada. Código bem organizado é uma alegria para mesclar. Ok, isso era mentira - mas pelo menos a dor é mantida em níveis administráveis.


0

Nunca uma linha em branco, não está no arquivo inteiro. Isso não quer dizer que não haja quebras no código:

 code;
 //
 morecode;

Linhas em branco são para abrir seções do código para trabalhar, você tem algumas teclas de atalho no seu editor para levá-lo para a linha em branco anterior / seguinte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.