Einfache Antwort: Weil es so definiert ist.
Längere Antwort: Es ist so definiert, weil einige Operationen konzeptionell einfacher sind:
- Wenn eine Datei 20 Buchstaben "A" enthält und Sie alle "A" entfernen, wird die Datei 20 Byte kürzer. Dieselbe Operation für eine Datei, die nur aus "AAAAAAAAAAAAAAAAAAAA" bestand, musste den Sonderfall einer verschwindenden Datei behandeln.
- In der Praxis müsste das Löschen der letzten Zeile einer Textdatei in einem speziellen Fall erfolgen.
- Texteditoren, die regelmäßig eine Sicherungskopie erstellen, benötigen Sonderfallcode, um die Situation zu bewältigen, in der der Benutzer möglicherweise die letzte Zeile löscht, zum Mittagessen geht und dann zurückkehrt und eine weitere Zeile hinzufügt. Weitere Komplikationen ergeben sich, wenn andere Benutzer in der Zwischenzeit eine Datei mit diesem Namen erstellt haben.
Sie können noch mehr tun: * Fehlerprotokolldateien werden in der Regel leer erstellt und nur dann gefüllt, wenn ein Fehler auftritt. * Um herauszufinden, wie viele Fehler aufgetreten sind, zählen Sie die Anzahl der Zeilen in den Protokolldateien. Wenn die Protokolldatei leer ist, ist die Anzahl der Fehler Null, was durchaus Sinn macht. * Manchmal sehen Sie Dateien, in denen der gesamte relevante Text im Dateinamen enthalten ist, z . B. oder .this-is-the-logging-directory
. Auf diese Weise wird verhindert, dass überlastete Administratoren nach der Installation leere Verzeichnisse löschen. Außerdem wird verhindert, dass ein Programm oder ein Benutzer versehentlich eine Datei erstellt, in der das Programm später ein Verzeichnis sehen möchte. Das git
Programm (und andere) ignorieren leere Verzeichnisse. Wenn ein Projekt / Administrator / Benutzer einen Datensatz haben möchte, in dem das Verzeichnis vorhanden ist, obwohl es (noch) keinen nützlichen Inhalt hat, wird möglicherweise eine leere Datei mit dem Namen angezeigtempty
empty.directory
Keine Operationen werden komplizierter:
- Verketten von Dateien: Dies ist nur ein No-Op mit einer leeren Datei.
- Suchen nach einer Zeichenfolge in einer Datei: Dies wird durch den Standardfall "Wenn die Datei kürzer als der Suchbegriff ist, kann sie den Suchbegriff nicht enthalten" abgedeckt.
- Lesen aus der Datei: Programme müssen damit fertig werden, das Ende der Datei zu erreichen, bevor sie das bekommen, was sie erwartet haben. Wiederum erfordert der Fall einer Datei mit der Länge Null keine zusätzlichen Überlegungen für den Programmierer: Er wird nur das Ende der Datei erreichen -Datei von Anfang an.
Bei Dateien kommt der Aspekt "Es ist eine Datei irgendwo aufgezeichnet" (Inode und / oder Dateiname) zu den obigen Überlegungen hinzu, aber Dateisysteme würden dies nicht tun, wenn leere Dateien unbrauchbar wären.
Im Allgemeinen gelten alle oben genannten Gründe mit Ausnahme derjenigen, die sich auf Dateinamen beziehen, für Sequenzen. Vor allem bei Strings, bei denen es sich um Sequenzen von Zeichen handelt: Strings mit einer Länge von Null sind in Programmen alltäglich. Zeichenfolgen sind auf Benutzerebene normalerweise nicht zulässig, wenn sie keinen Sinn ergeben: Ein Dateiname ist eine Zeichenfolge, und die meisten Dateisysteme lassen keine leere Zeichenfolge als Dateinamen zu. Intern kann das Programm beim Erstellen von Dateinamen aus Fragmenten eine leere Zeichenfolge als eines der Fragmente haben.