BlitzBasic: Vorlage:HinweisTypeVsDim

Merke
Type-Listen sind flexibler, einfacher und sicherer zu benutzen als Dim-Felder, weil der Programmieraufwand und die Fehlermöglichkeiten bei Verwendung von Dim-Feldern erheblich ansteigen. Deshalb sollte Type bevorzugt verwendet werden.

Informationen zu dieser Dokumentation
Vorlage BlitzBasic: Vorlage:HinweisTypeVsDim [Bearbeiten]

In manchen Foren steht dieser Satz umgekehrt, wonach »Dim« einfacher zu benutzen und bevorzugt verwendet werden sollte. Das ist jedoch falsch, weil eine Verwendung von Dim-Feldern nur für sehr einfach Datenfelder sinnvoll ist. Komplexere Aufgaben stellen Anfänger vor nahezu unlösbare Probleme und erfordern von Fortgeschrittenen erheblichen, fehleranfälligen Programmieraufwand nur um Funktionen zu nutzen, für die in Blitzbasic für Types bereits entsprechende Funktionen implementiert sind.

Beispiel

Datum merken

Bei Types kann man alle benötigten Daten in Feldern eines Eintrags zusammenfassen und sinnvoll benennen. Dieses Beispiel ist noch sehr einfach, da nur Daten vom gleichen Typ verwendet werden.

mit Dim mit Type
Bei Dim muss man für die Anzahl der Datensätze eine globale Variable anlegen. Man muss sich entweder merken, welche Felder für Tag, Monat oder Jahr stehen, oder dafür Konstanten anlegen.
Global CountDatum
Dim Datum(2,0)
Const Tag=0,Monat=1,Jahr=2
Type anlegen und Felder benennen.
Type Datum
  Field Tag%,Monat%,Jahr%
End Type
Hier ist schon eine mögliche Fehlerquelle:
Wenn man irgendwo im Programm CountDatum verändert, kommt es beim nächsten Dim-Feld-Zugriff zu einem Fehler, der schwer zu finden ist.
Type-Einträge werden automatisch verwaltet, wodurch kein Counter benötigt wird. Somit dadurch auch kein Fehler entstehen kann.
Ein neuer Datensatz wird hinzugefügt, hierbei ist die richtige Schreibweise der Variablen unbedingt zu beachten
CountDatum=CountDatum+1
Datum(Tag,CountDatum)=15
Datum(Monat,CountDatum)=4
Datum(Jahr,CountDatum)=2024

Moant anstelle von Monat erzeugt keinen Fehler, weil Moant als neue Variable mit dem Wert 0 interpretiert wird, wodurch das Tag-Feld mit Monat überschrieben wird und der Monat leer bleibt. Es wird also fälschlich das Datum 4.0.2024 gespeichert. Da kein Fehler gemeldet wurde, wird die Fehlersuche je nach Codegröße zeitaufwendig

Ein neuer Eintrag kann einfach mit New hinzu gefügt werden
Neu.Datum=New Datum
Neu\Tag=15
Neu\Monat=4
Neu\Jahr=2024

Moant anstelle von Monat erzeugt die Fehlermeldung "Type field not found" und kann gleich an der beanstandeten Stelle korrigiert werden.

Eine Übergabe der Datensatznummer an eine Variable muss immer korrigiert werden, wenn vor dem Datensatz andere Datensätze eingefügt oder gelöscht werden. Außerdem ist zu beachten, dass die Variable nicht an anderer Stelle in einem anderen Zusammenhang verwendet wird.
heute%=CountDatum
Eine Übergabe des Eintrags an einen Typezeiger braucht nicht korrigiert werden, egal wann und wo andere Einträge hinzugefügt oder gelöscht werden. Ein Typezeiger, der mit einer Type-Liste definiert wurde, kann nicht für andere Type-Listen verwendet werden
heute.Datum=Neu
Datensätze zu löschen oder an eine andere Position zu verschieben, erfordert erheblichen Progammieraufwand, weil alle nachfolgenden Datensätze auch verschoben werden müssen und alle gespeicherten Datensatznummern angepasst werden müssen. In Type-Listen können Einträge mit Delete gelöscht oder mit Insert leicht an eine andere Position verschoben werden, was keinerlei Änderung an anderen Einträgen erfordert und keinen Einfluss auf Typezeiger hat.
Dim-Felder können nicht als Parameter oder Rückgabetyp einer Funktion verwendet werden, sondern es muss ein Index eines Datensatz als Parameter übergeben werden und die Funktion muss dann benötigte Werte auslesen. Komplizierter wird es bei der Rückgabe, denn es kann auch nur ein Index zurück gegeben werden, und an jeder Stelle an der die Funktion aufgerufen wurde, müssen die Felder ausgelesen werden. Auchbei Verwendung in Funktionen gilt, das der Index nach jedem Löschen oder Einfügen von Datensätzen angepasst werden muss. Typezeiger können problemlos als Parameter oder Rückgabetyp einer Funktion verwendet werden, Anpassungen sind nicht erforderlich.
In einem Dim-Feld können nur Variablen eines Typs gespeichert werden. Will man mehrere Variablen-Typen verwenden, muss man dafür mehrere Dim-Felder anlegen und alle Änderungen an jedem der Dim-Felder vornehmen, wodurch sich der Programmieraufwand und die Fehlermöglichkeiten vervielfältigen. Ein Type-Eintrag kann Felder beliebigen Variablentyps in beliebiger Reihenfolge enthalten.
Der Index des niedrigsten Datenfeldes ist immer 0, der höchste Index ist jedoch mit Blitzbasic nur aus dem Dim-Feld nicht ermittelbar. Die Funktion First gibt einen Typezeiger auf den ersten Eintrag zurück. Die Funktion Last gibt einen Typezeiger auf den letzten Eintrag zurück.