Resposta simples: porque é definido dessa maneira.
Resposta mais longa: é definida dessa maneira porque algumas operações são conceitualmente mais simples:
- Se um arquivo contiver 20 letras "A" e você remover todos os "A" s, o arquivo ficará 20 bytes mais curto. A mesma operação em um arquivo que consiste apenas em "AAAAAAAAAAAAAAAAAAA" teria que lidar com o caso especial de um arquivo que desapareceu.
- Mais praticamente, a exclusão da última linha de um arquivo de texto precisaria ser especificada.
- Os editores de texto que fazem backup regularmente precisam de um código de caso especial para lidar com a situação em que o usuário pode excluir a última linha, almoçar e voltar e adicionar outra linha. Outras complicações surgem se outros usuários criarem um arquivo com esse nome nesse meio tempo.
Você pode fazer mais coisas: * Os arquivos de log de erros tendem a ser criados vazios, a serem preenchidos se e somente se ocorrer um erro. * Para descobrir quantos erros ocorreram, conte o número de linhas nos arquivos de log. Se o arquivo de log estiver vazio, o número de erros será zero, o que faz todo o sentido. * Às vezes você vê arquivos onde todo o texto relevante está no nome do arquivo, por exemplo this-is-the-logging-directory
. Isso evita que administradores excessivos excluam diretórios vazios após a instalação e também evita erros nos casos em que um programa ou usuário cria acidentalmente um arquivo no qual o programa gostaria de ver um diretório posteriormente. O git
programa (e outros) tendem a ignorar diretórios vazios e, se um projeto / administrador / usuário quiser ter um registro de que o diretório existe, mesmo que ainda não tenha conteúdo útil, você poderá ver um arquivo vazio chamadoempty
ou empty.directory
.
Nenhuma operação se torna mais complicada:
- Concatenando arquivos: este é apenas um no-op com um arquivo vazio.
- Procurando por uma sequência em um arquivo: isso é coberto pelo caso padrão de "se o arquivo for menor que o termo de pesquisa, não poderá conter o termo de pesquisa".
- Lendo do arquivo: os programas precisam lidar com o final do arquivo antes de obter o que esperavam; então, novamente, o caso de um arquivo de tamanho zero não envolve um pensamento extra para o programador: ele apenas atingirá o final de -arquivo desde o início.
No caso de arquivos, o aspecto "existe um arquivo gravado em algum lugar" (inode e / ou nome do arquivo) é complementado pelas considerações acima, mas os sistemas de arquivos não o fariam se os arquivos vazios fossem inúteis.
Em geral, todos os motivos acima, exceto aqueles relacionados a nomes de arquivos, se aplicam a sequências. Mais notavelmente para strings, que são seqüências de caracteres: strings de comprimento zero são comuns dentro de programas. Seqüência de caracteres não é permitida no nível do usuário se não fizer sentido: um nome de arquivo é uma sequência e a maioria dos sistemas de arquivos não permite uma sequência vazia como nome de arquivo; internamente, ao criar nomes de arquivos a partir de fragmentos, o programa pode ter uma sequência vazia como um dos fragmentos.