In Harbour gibt es neben einfachen Datentypen wie numerisch, Zeichenkette und logisch auch komplexe Datentypen, die es erlauben, Informationen effizienter zu strukturieren und zu handhaben. Die beiden wichtigsten sind **Arrays** und **Hashes**.
Ein Array (oder Feld) ist eine geordnete Sammlung von Elementen. Jedes Element im Array hat eine Position oder einen numerischen Index, der in Harbour bei 1 beginnt. Arrays können Elemente jedes Datentyps enthalten – sogar andere Arrays oder Hashes!
Du kannst ein Array auf verschiedene Arten erstellen:
// Ein leeres Array
LOCAL aMeinArray1 := {}
// Ein Array mit initialen Elementen
LOCAL aMeinArray2 := { "Apfel", "Banane", "Orange" }
// Verwendung der Funktion Array(), um ein Array einer bestimmten Größe zu erstellen
LOCAL aMeinArray3 := Array(10) // Erstellt ein Array mit 10 NIL-Elementen
Auf Elemente wird über ihren numerischen Index in eckigen Klammern []
zugegriffen.
LOCAL aFrüchte := { "Apfel", "Banane", "Orange" }
? aFrüchte[1] // Zeigt "Apfel"
? aFrüchte[3] // Zeigt "Orange"
// Ein Element modifizieren
aFrüchte[2] := "Erdbeere"
? aFrüchte[2] // Zeigt "Erdbeere"
Ein Hash (auch bekannt als Wörterbuch oder Map in anderen Sprachen) ist eine Sammlung von Schlüssel-Wert-Paaren. Anstatt einen numerischen Index zu verwenden, wird ein "Schlüssel" (normalerweise eine Zeichenkette) verwendet, um auf seinen zugehörigen "Wert" zuzugreifen. Hashes sind extrem nützlich zum Speichern strukturierter Daten.
// Ein leerer Hash
LOCAL hMeinHash1 := {=>}
// Ein Hash mit initialen Schlüssel-Wert-Paaren
LOCAL hPerson := { "name" => "Jan", "alter" => 30, "stadt" => "Berlin" }
// Verwendung der Funktion HSet()
LOCAL hMeinHash2 := {=>}
HSet( hMeinHash2, "schluessel1", "wert1" )
Auf Werte wird über ihren Schlüssel zugegriffen, unter Verwendung der Syntax hMeinHash["schluessel"]