Por que alguns idiomas recomendam o uso de espaços em vez de guias? [fechadas]

10

Talvez eu esteja sozinho nisso, mas poucas coisas me incomodam como pessoas recuando usando espaços em vez de tabulações. Como a digitação é SpaceSpaceSpaceSpacemais fácil e intuitiva do que a digitação Tab? Claro, a largura da guia é variável, mas é muito mais indicativa de espaço de indentação do que espaços. O mesmo vale para o retrocesso; retroceder uma ou quatro vezes?

Por que linguagens como Python recomendam o uso de espaços sobre guias?

Naftuli Kay
fonte
24
Você pode configurar a maioria dos editores para inserir espaços em vez de guias ao pressionar tab. Se você não pode configurá-lo no seu editor favorito, precisa de um editor melhor.
Adam Lear
uma coisa, muitos editores podem ser configurados para inserir de 4 a 8 espaços quando a tecla 'tab' é pressionada; portanto, é apenas uma tecla pressionada como a tab.
Echo diz Restabelecer Monica
2
Ainda não responde à minha pergunta. Por que espaços em vez de guias? Claro, você pode configurar seu editor para inserir espaços em vez de guias, mas também é possível inserir abas com espaços. A questão é por que você quer fazer isso? Que benefício possível é derivado?
Naftuli Kay
4
Os espaços @Tk são abas inequívocas, podem ser alteradas #
Martin Beckett
3
@TKKocheran, porque as guias fazem coisas estranhas à sua saída quando você as insere acidentalmente em uma string.
zzzzBov

Respostas:

15

Consistência, principalmente.

Além disso, ocasionalmente surge algo que realmente usa o espaço em branco - como Python: Diga-me, o que acontecerá se eu executar o seguinte trecho de código?

def foo():
    print "a"
    print "b"

Resposta: Você receberá um IndentationError, porque essas duas instruções de impressão não são recuadas no mesmo nível - e, portanto, não fazem parte do mesmo bloco de código. (O primeiro usa uma guia, o segundo todos os espaços)

Existem os casos frustrantes em que o editor de um desenvolvedor tem guias definidas para 8 espaços, e outro as define em 4 e alguém usa 5 por algum motivo estranho ... Pode parecer perfeitamente normal em uma estação de trabalho, mas depois é verificado para O SVN e outras pessoas atualizam, eles verão uma bagunça horrível.

Portanto, essas são duas boas razões para sempre sermos consistentes, sejam espaços ou tabulações.

Porém, os espaços permitem muito mais controle sobre o recuo do que as guias e não exigem nenhuma configuração especial nos editores para que ele funcione. (Embora possa ser mais fácil - por exemplo, no vim, use apenas set expandtabpara inserir espaços sempre que você clicar na guia)

EDIT: E de maneira divertida, o site parece ter normalizado minhas guias em espaços para que o navegador possa exibi-lo corretamente. Clique em "editar" para visualizar o original, guias incluídas;)

Izkata
fonte
5
Seus problemas com as guias (especialmente a horrível bagunça do SVN) só ocorrem se você usar a opção guias para espaços no seu editor. Se você e sua equipe concordam em desativar a opção de guias para o espaço, uma guia sempre será uma guia em qualquer visualização: então é apenas uma escolha da largura que você deseja exibir no seu editor.
HorusKol
@HorusKol Não, a bagunça horrível é porque espaços e abas se misturam. Acho que não fiz isso tão óbvio o suficiente (veja a frase solitária após a frase "bagunça horrível e horrível"). Portanto, os espaços foram criados para se alinharem bem com as guias quando configurados para serem equivalentes a 4 espaços, mas quando outra pessoa os visualiza (independentemente de as guias para espaços estarem definidas), elas ficam uma bagunça.
22711 Izkata
4
Vejo - bem, você precisa definir uma orientação para sua equipe - seja consistentemente usar espaços ou tabulações ... De qualquer maneira, guias-to-espaços é uma má idéia toda a volta;)
HorusKol
21
É por isso que considero a idéia de linguagens com espaço em branco uma falha de design. Coisas que você não pode ver nunca devem quebrar seu código.
Paul Nathan
Só para constar, eu concordo com @PaulNathan
Izkata
11

Esta é uma boa discussão sobre recuo e espaço em branco no Python; do artigo:

Pode ser uma boa idéia evitar abas por completo, porque a semântica das abas não é muito bem definida no mundo dos computadores e pode ser exibida de maneira completamente diferente em diferentes tipos de sistemas e editores. Além disso, as guias geralmente são destruídas ou convertidas incorretamente durante as operações de copiar e colar ou quando um pedaço do código-fonte é inserido em uma página da web ou em outro tipo de código de marcação.

Quanto ao seu argumento sobre pressionar a barra de espaço ou a tecla backspace 2 ou mais vezes, uma vez que a maioria dos editores de código-fonte inserirá um número configurável de espaços com um único toque na tecla tab e, semelhantemente, o recuo, não há mais teclas pressionadas quando usando espaços para recuo.

Para mim, prefiro espaços porque o código é sempre exibido com a mesma quantidade de indentação, esteja sendo visualizado em um IDE lessou no Bloco de Notas; ou seja, os espaços são mais portáteis.

Mike Partridge
fonte
3
re: "se eu estou visualizando em um IDE, ou menos, ou bloco de notas; ou seja, os espaços são mais portáteis" - esse é o melhor argumento para os espaços que já ouvi. Eu mesmo sou do tipo "tabs", mas ocasionalmente não gostei de ver o código com espaçamento de tabulação renderizado de maneiras inesperadas.
Aerik
2

No Python, o recuo controla o fluxo do programa e, portanto, é vital.
Se você pegar o código formatado com guias e copiá-lo para que as guias sejam alteradas ou perdidas, a estrutura do código é destruída. Os espaços são sempre espaços = muito mais seguros.

Se o desgaste da barra de espaço o preocupa, provavelmente o seu editor poderá ser configurado para converter automaticamente as guias em espaços.

Martin Beckett
fonte
Estou mais preocupado com o tempo desperdiçado gasto digitando espaço ou backspace quatro vezes, contra um pressionamento de tecla para fazer as duas coisas.
Naftuli Kay
Sim, mas Python é estranho assim. Nunca me deparei com outra coisa que se preocupasse com espaços.
Aerik
@TKKocheran Oh, essa é a sua verdadeira preocupação? Eu não sei como eles fizeram isso, mas vim no meu trabalho é configurado para que backspace remonta à última tabstop, ao longo de vários espaços, completamente transparente
Izkata
Você poderia despejar .vimrcpara mim :)
Naftuli Kay
11
@TKKocheran Encontrei - é apenas set softtabstop=4, e o TAB e o BACKSPACE usarão quatro espaços como uma guia. (Bem, para cada tabstop, tratando a largura como espaços 4)
Izkata
2

Os espaços sempre devem ser usados, porque as guias por si só não são suficientemente flexíveis para muitos estilos, e a mistura de guias e espaços (quase) sempre produz uma bagunça absoluta.

Para um exemplo de um estilo que geralmente precisa de espaços, considere algo como:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

A menos que você queira renomear todas as suas funções como um múltiplo exato do tamanho da guia (menos uma para os parênteses), as guias por si só não farão isso.

Quanto à mistura de abas e espaços, você quase imediatamente encontra um problema sério: as abas não são constantemente expandidas da mesma maneira. Alguns softwares tratam uma guia como equivalente a um número específico de espaços. Outro software expandirá um módulo de guia em um número específico de espaços - por exemplo, um item após um guia sempre inicia com um número de coluna que é múltiplo de (digamos) 8.

Mesmo que você possa garantir que os espaços não se misturem às suas guias, você ainda tem um problema: as guias também são mal reproduzidas com fontes de largura variável. Esse problema surge quando (por exemplo) você deseja comentários finais alinhados:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

Como estão agora, tudo isso se alinha perfeitamente. Visto com uma fonte de largura variável, no entanto, as coisas ficam feias. Com espaços, os comentários podem (com frequência) ficar um pouco desalinhados. Com abas, no entanto, o desalinhamento geralmente se torna bastante radical:

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

De repente, a pequena diferença de largura entre o 'i' e o 'm' ou 'x' em nossa fonte de largura variável foi ampliada para uma parada de tabulação inteira.

O ponto principal é que quase qualquer alteração na maneira como você visualiza o código com guias, por mais trivial que seja, pode e geralmente produz uma bagunça ilegível.

Para responder às suas outras perguntas: outras já apontaram, mas não consigo imaginar alguém em um editor de programação (ou quase tudo) usando a barra de espaço para inserir os espaços. Portanto, sua pergunta sobre: ​​"digitar spacespacespacespace" é irrelevante porque ninguém faz isso de qualquer maneira. Da mesma forma com o espaçamento entre as costas: é difícil imaginar um editor que exija pressionar BkSpcquatro vezes para ir para uma parada de tabulação anterior, então (novamente) a pergunta é irrelevante.

Bottom line: guias são muito bem se você (e só você) vai sempre olhar para o seu código, e você só fazê-lo com um único editor que você não reconfigure (em tudo!) Essas condições, no entanto, estão tão perto de impossível imponha que haja apenas uma resposta razoável: nunca use guias.

Jerry Coffin
fonte
11
Vejo você dizer "fontes proporcionais dividem espaços e tabulações, mas quebram tabulações ainda mais, portanto, use espaços". Por que não usar tabstops elásticos? nickgravgaard.com/elastictabstops
amara
@sparkleshy: É uma boa idéia, mas não faz diferença para o código real, e não será até que todos (ou pelo menos a grande maioria dos) editores reais já o incluam.
Jerry Coffin
... eu sei: '(- bem, meio. Você ainda pode usar um editor apoiado por espaços (como a tecla tab, se estiver usando espaços), mas finge que são tabulações elásticas; isso facilita o gerenciamento dos espaços mais fácil.
amara
2
Se você está programando em fontes de largura proporcional, bem, você tem muito mais problemas do que apenas guias que se preocupar ...
Brian Knoblauch
11
@BrianKnoblauch: Como alguém que usa a fonte eurofurence, devo discordar. As únicas coisas que me causam problemas são os espaços. Isso também tem a ver com o meu estilo de indentação, é claro, que nunca deve diferir em mais de uma guia entre linhas. Supondo que eu recebo tabstops elásticos, meu código ficará ainda melhor.
mago
2

O grande problema é a inconsistência da largura da "guia", às vezes eles são renderizados como quatro espaços, às vezes oito. Em muitos editores, você pode configurá-los para qualquer coisa de 1 a 9 espaços.

Portanto, isso transforma um simples editor WYSWYG em O que você vê é o que alguém PODE obter.

É um problema específico para o Python, mas também é um problema em qualquer uma das linguagens "colchetes", pois o recuo é usado para transmitir significado aos leitores humanos e as guias desarrumadas dificultam a leitura do código.

James Anderson
fonte