Melhor resposta
Primeiro, deixe-me começar dizendo que sou um programador profissional há cerca de 10 anos e tenho sido me interessando em programação por quase 20 anos (desde que eu era muito jovem). Escrevi PHP, Java, C ++, Python, JavaScript, C #, ASP e QBasic (sim, sou velho). Também lido regularmente com SQL, CSS e HTML.
Usei editores no Windows, Linux e Mac. Também usei editores em janelas de terminal. Tenho programado profissionalmente há cerca de 10 anos. Posso dizer por experiência pessoal, tendo usado mais de 30 editores (tanto editores de texto como VIM e Nano, bem como IDEs como Visual Studio e PhpStorm), que a exibição padrão das guias nos editores varia muito.
Além disso, mesmo quando você dá a eles as mesmas configurações, às vezes você tem outras estranhezas e inconsistências causadas pelo editor ou pela fonte do editor. Os espaços simplesmente não têm esse problema porque são uma construção de linguagem padrão.
Uma coisa que percebi consistentemente é que a maioria dos guias de estilo de programação, como PHP-FIG, dizem para você usar espaços de tabulação. Isso é tabulação que usa espaços para imitar o caractere de tabulação. Às vezes chamado de tabulação inteligente.
Isso é compatível com qualquer editor que você possa imaginar que seja razoavelmente moderno. Portanto, o argumento sobre velocidade é completamente ridículo. Quanto ao argumento sobre o espaço ocupado no disco. Literalmente, ninguém se preocupa com meio byte extra no tamanho do arquivo. Se essa é a sua preocupação, você está se perdendo enormemente no espaço em disco e nos custos.
O único argumento que resta é a exibição visual. É aqui que os espaços deixam guias na poeira. Você não verá a consistência nas guias que vê com espaços. Os espaços têm a mesma aparência em todos os editores. As guias variam muito e se você tiver que abrir um arquivo em um editor de terminal (digamos, ao inspecionar algo em um servidor remoto), odiará lidar com guias, especialmente quando tiver que rolar para a direita em um editor somente de texto.
Se você deseja consistência e padronização (especialmente os padrões mais comuns), você usará espaços. Se você só quer se concentrar em reclamações ridículas e irritar outros desenvolvedores com quem você trabalha, use tabs.
Resposta
As vantagens de tabs sobre espaços são:
- Os desenvolvedores individuais podem escolher recuos diferentes para seus códigos.
- Eles também usam menos espaço de armazenamento.
Porém, as guias apresentam problemas.
As guias interagem mal com larguras máximas de coluna. O projeto escolhe larguras máximas de coluna por vários motivos, incluindo a garantia de que os desenvolvedores possam fazer análises lado a lado em seus monitores e a garantia de que os desenvolvedores possam escanear o código rapidamente. (Os comprimentos de linhas longas reduzem a velocidade de leitura. Este é um dos motivos pelos quais os editores usam várias colunas em livros didáticos.)
Vamos supor que seu padrão de codificação especifique um comprimento máximo de linha de 80 colunas.
O primeiro desenvolvedor o desenvolvedor tem uma linha que foi indentada quatro vezes e eles estão usando uma configuração de indentação de duas marcas. Isso significa que o código está indentado em 8 colunas. O desenvolvedor escreve uma linha completa. Essa linha consiste em 72 caracteres.
Este código vai para um revisor. O revisor verifica se o código está usando um recuo de tabulação de 4 caracteres. As quatro guias agora têm 16 caracteres de largura. A linha agora vai para a coluna 88. O revisor diz ao desenvolvedor para cortar 8 caracteres.
O segundo revisor olhando para o código está usando um recuo de 8 caracteres. O revisor examina o código usando um recuo de tabulação de 8 caracteres. As quatro guias têm 32 caracteres de largura. O revisor diz ao desenvolvedor para cortar 24 caracteres.
Esses problemas desaparecem se você usar espaços ou especificar uma configuração de guia uniforme para a organização. Se você estiver especificando uma configuração de tabulação fixa, então eliminou um dos principais argumentos para o uso de tabulações para começar.
Agora, vamos considerar um documento here ou string multilinhas contendo texto formatado. Você pode incorporar um diagrama criado com uma ferramenta como asciiflow ou monodraw. Se você estiver usando tabulações para recuos, os desenhos de recuo exigirão o uso de uma combinação de recuos e espaços. Fazer isso funcionar com recuos de tabulação diferentes requer:
- Usar uma combinação de tabulações iniciais seguidas de espaços para alinhar a uma determinada coluna. Todas as linhas da imagem devem ter o mesmo número de recuos de tabulação ou a imagem não parecerá correta quando usada com outras configurações de recuo de tabulação.
- Colocar um caractere marcador para indicar o início da seção delimitada por espaço. por exemplo. \ t / * \ n \ t * foo \ n \ t *. | \ n \ t * bar \ n \ t * / \ n
- Abandonar o padrão de tabulação nessas áreas gráficas.
- Outlaw strings ou comentários com várias linhas.
Todos esses problemas desaparecem quando você usa espaços para seus recuos.