Resposta simples: porque está definido dessa forma.
Resposta mais longa: é definida dessa forma 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 consistia apenas em "AAAAAAAAAAAAAAAAAAAA" teria que lidar com o caso especial de um arquivo que está desaparecendo.
- Mais praticamente, a exclusão da última linha de um arquivo de texto precisaria ser de capa especial.
- 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, ir almoçar, depois 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:
* Arquivos de log de erros tendem a ser criados vazios, para 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 é zero, o que faz todo o sentido.
* Às vezes, você vê arquivos em que todo o texto relevante está no nome do arquivo, por exemplo, %código%. Isso impede que administradores sobrecarregados excluam diretórios vazios após a instalação e também evita erros nos quais um programa ou usuário cria acidentalmente um arquivo no qual o programa gostaria de ver um diretório mais tarde. O programa this-is-the-logging-directory
(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 não tenha conteúdo útil (ainda), você poderá ver um arquivo vazio chamado git
ou empty
.
Nenhuma operação se torna mais complicada:
- Concatenando arquivos: isso é apenas um não operacional com um arquivo vazio.
- Procurando por uma string em um arquivo: isso é coberto pelo caso padrão de "se o arquivo for menor que o termo de pesquisa, ele não pode conter o termo de pesquisa".
- Leitura do arquivo: os programas precisam lidar com o final do arquivo antes que eles tenham o esperado, então, novamente, o caso de um arquivo de comprimento zero não envolve pensamento extra para o programador: ele simplesmente acertará fim do arquivo desde o começo.
No caso dos arquivos, o aspecto "há um arquivo gravado em algum lugar" (inode e / ou nome do arquivo) vem em cima das considerações acima, mas os sistemas de arquivos não fariam isso se os arquivos vazios fossem inúteis.
Em geral, todos os motivos acima, exceto aqueles relacionados a nomes de arquivos, se aplicam a seqüências.
Mais notavelmente para strings, que são sequências de caracteres: Strings de comprimento zero são comuns dentro dos programas.
As cadeias de caracteres geralmente não são permitidas no nível do usuário, se não fizerem sentido: um nome de arquivo é uma cadeia de caracteres e a maioria dos sistemas de arquivos não permite uma cadeia vazia como um nome de arquivo; internamente, ao criar nomes de arquivos a partir de fragmentos, o programa pode ter uma string vazia como um dos fragmentos.