Tabulação vs espaços

Quando eu comecei a programar, descobri a indentação e passei a achar interessante o uso do caractere de tabulação para fazer a indentação do código. Hoje eu utilizo espaços e resolvi escrever esse post para partilhar alguns fatos sobres esses dois “concorrentes”.

É natural pensar que caractere invisível da tecla tab e o conceito de identação foram feitos um para o outro, afinal o tab mapeia o conceito de identação muito bem. Você quer um nível de identação, tab (1x). Você quer dois níveis de identação, tab (2x). O mesmo não ocorre com espaço. Você quer um nível de indentação, espaço (2x, 4x ou 8x). Você quer dois níveis de identação, espaço (4x, 8x ou 16x). Como se não bastasse, grande parte dos editores de texto permite personalizar o tamanho de espaço deixado pelo tab. Assim, o código se adapta ao usuário e acabam as discussões sobre o quanto é uma boa quantia de espaço.

Entretanto, há uma tarefa para o qual o caractere de tabulação simplesmente não funciona. Essa tarefa é o alinhamento e ela É comum em programação. Se você por acaso não acha que essa é uma tarefa comum, é porque propositalmente a evita, ou talvez porque só programou tantas linhas de código quanto a participante SaraJo, pelo menos publicamente, dessa discussão feminista desnecessária no projeto libuv. O código e a imagem a seguir tentam demonstrar o que é espaço para identação e espaço para alinhamento:

int main()
{
printf("Hello"
" World\n");/*
/\/\
||||/\/\/\
||||\_____This is space for alignment.
\_________This is space for identing.*/
}
view raw ident.cpp hosted with ❤ by GitHub

indent

Até hoje eu não vi um único editor esperto o suficiente para ser capaz de fazer a indentação usando caracteres de tabulação e espaços para alinhamento. Sempre é “espaços ou tabs, escolha um”.

Além do problema do alinhamento, outra desvantagem do tab é justamente o que apresentei anteriormente como uma vantagem, que é uma visão personalizada do código para cada usuário. O problema ocorre pelo fato de muitas das convenções de código adotar um limite no número de caracteres por linha (normalmente para 80 ou 100), mas quando cada programador do time configura seu editor para mostrar um número diferente de espaços para o caractere de tabulação, fica, no mínimo, complicado obedecer essa regra.

Agora vamos deixar os fatos de lados e começar a enxergar outros aspectos:

EDIT (2016/06/01):

Encontrei uma ótima referência ao assunto graças ao Magnun: https://www.emacswiki.org/emacs/TabsAreEvil (um pouco irônico ele ter mandado link da wiki do Emacs já que ele é usuário de vim)

Imagem da página 2016-06-01 - 14.44.27

EDIT (2016/07/15):

Algumas estatísticas sobre tabs e espaços do GitHub.

Tags:,

2 Respostas para “Tabulação vs espaços”

    • Vinipsmaker diz :

      Os outros “pontos” que ele comenta são portabilidade e uso de diffs? Isso é ruim, pois *É* possível trabalhar nos cenários descritos independente de usar tabulação ou espaço e sem nenhum esforço por parte do desenvolvedor.

Comentários (with MarkDown support)