Das Type Schlüsselwort (keyword) wird verwendet, um eigene Types oder Strukturen zu erstellen. Sie können diese Types verwenden um einfache Strukturen zu erstellen, die einige Werte zusammenstellen.
Sie können Type jedoch auch verwenden, um komplexere Sammlungen zu erstellen.
In diesem Tutorial erstellen wir eine verkettete Liste.
Eine einfachere Nutzung von Typ ist in dem Http Web Services und mehr (mit Lybraries arbeiten) Currency Converter Tutorial demonstriert.
Eine verkettete Liste ist eine Sammlung von Elementen. Jedes Element hat ein Wert-Feld und ein "nächstes Element" (next element) Objekt. Das "nächste Element" Objekt ist eigentlich ein Verweis auf das nächste Element in der Liste.
Type wird wie folgend deklariert:
Das Interessante an dieser Deklaration ist, daß wir den aktuellen Type als Feld benutzen. Die Fähigkeit, solche rekursive Types erklären zu können ist sehr mächtig.
Um auf irgend ein Type-Feld zugreifen zu können, muss man es zuerst initialisieren durch den Aufruf seiner Initialize-Methode. Beachten Sie, daß, wenn die Felder automatisch initialisiert wurden dann wäre es nicht möglich, solche rekursiven Typen zu erstellen.
Beachten Sie auch, daßwenn Ihr Type nur numerische Felder und Strings enthält dann besteht keine Notwendigkeit Initialize aufzurufen (es wird nichts Schlimmes passieren, wenn Sie es dennoch initialisieren).
Nachdem wir ein Type deklariert haben, können können wir es wie jedes andere "normale" Type verwenden. Es kann an Subs übergeben werden und man kann auch ein Array davon erstellen.
Erstellung der Liste:
Die InitializeList Sub initialisiert das 'Head' (Kopf) Element, setzt seinen Wert und setzt die 'Last' Variable so daß sie auf das Head-Element verweist (da es der einzige Eintrag in der Liste ist).
Hinzufügen eines Elements:
Erstellung eines neuen Elements. Das aktuelle Last.NextElement-Feld wird auf das neue Element gesetzt und eventuell wird die 'Last' Variable auf das neue Element aktualisiert.
Das Durchlaufen aller Elemente in der Liste, geht folgendermassen vor. Wir beginnen mit dem Head Element und dann gehen wir weiter durch Aufruf von NextElement. Wenn wir ein nicht initialisiertes Element erreichen hören wir auf.
Der komplette Code:
Programm Dateien:
LinkedList.zip
Das Englische Originaltutorial.
Sie können Type jedoch auch verwenden, um komplexere Sammlungen zu erstellen.
In diesem Tutorial erstellen wir eine verkettete Liste.
Eine einfachere Nutzung von Typ ist in dem Http Web Services und mehr (mit Lybraries arbeiten) Currency Converter Tutorial demonstriert.
Eine verkettete Liste ist eine Sammlung von Elementen. Jedes Element hat ein Wert-Feld und ein "nächstes Element" (next element) Objekt. Das "nächste Element" Objekt ist eigentlich ein Verweis auf das nächste Element in der Liste.
Type wird wie folgend deklariert:
B4X:
Sub Process_Globals
Type Element (NextElement As Element, Val As Int)
Dim Head As Element 'declare a variable of that type.
Dim Last As Element
End Sub
Um auf irgend ein Type-Feld zugreifen zu können, muss man es zuerst initialisieren durch den Aufruf seiner Initialize-Methode. Beachten Sie, daß, wenn die Felder automatisch initialisiert wurden dann wäre es nicht möglich, solche rekursiven Typen zu erstellen.
Beachten Sie auch, daßwenn Ihr Type nur numerische Felder und Strings enthält dann besteht keine Notwendigkeit Initialize aufzurufen (es wird nichts Schlimmes passieren, wenn Sie es dennoch initialisieren).
Nachdem wir ein Type deklariert haben, können können wir es wie jedes andere "normale" Type verwenden. Es kann an Subs übergeben werden und man kann auch ein Array davon erstellen.
Erstellung der Liste:
B4X:
Sub InitializeList (Value As Int)
Head.Initialize
Head.Val = Value
Last = Head 'The last item is currently the head.
End Sub
Hinzufügen eines Elements:
B4X:
Sub AddElement(Value As Int)
'create a new element
Dim e As Element
e.Initialize
e.Val = Value
Last.NextElement = e 'set the NextElement of the current last element to the new one.
Last = e 'set the last variable to point to the new element.
End Sub
Erstellung eines neuen Elements. Das aktuelle Last.NextElement-Feld wird auf das neue Element gesetzt und eventuell wird die 'Last' Variable auf das neue Element aktualisiert.
Das Durchlaufen aller Elemente in der Liste, geht folgendermassen vor. Wir beginnen mit dem Head Element und dann gehen wir weiter durch Aufruf von NextElement. Wenn wir ein nicht initialisiertes Element erreichen hören wir auf.
B4X:
Sub ListToString As String
Dim e As Element
Dim sb As StringBuilder
sb.Initialize
e = Head
Do While e.IsInitialized = True
sb.Append(e.Val).Append(CRLF)
e = e.NextElement
Loop
Return sb.ToString
End Sub
B4X:
Sub Process_Globals
Type Element (NextElement As Element, Val As Int)
Dim Head As Element
Dim Last As Element
End Sub
Sub Globals
End Sub
Sub InitializeList (Value As Int)
Head.Initialize
Head.Val = Value
Last = Head 'The last item is currently the head.
End Sub
Sub AddElement(Value As Int)
'create a new element
Dim e As Element
e.Initialize
e.Val = Value
Last.NextElement = e 'set the NextElement of the current last element to the new one.
Last = e 'set the last variable to point to the new element.
End Sub
Sub ListToString As String
Dim e As Element
Dim sb As StringBuilder
sb.Initialize
e = Head
Do While e.IsInitialized = True
sb.Append(e.Val).Append(CRLF)
e = e.NextElement
Loop
Return sb.ToString
End Sub
Sub Activity_Create(FirstTime As Boolean)
InitializeList(10)
AddElement(9)
AddElement(8)
AddElement(7)
AddElement(6)
AddElement(5)
Msgbox(ListToString, "List values")
End Sub

Das Englische Originaltutorial.
Last edited: