Datentypen und Datenstrukturen Datentypen geben den Wertebereich von Daten an. Darin sind bestimmte Operationen definiert, die für alle Daten dieses Typs anwendbar sind. Je nach Programmiersprache und Programmierparadigma gibt es unterschiedliche Datentypen: Elementare Datentypen Datentyp integer float boolean None Bemerkungen 4 Byte Speicherplatz 4 Byte Speicherplatz IEEE 754 1 Byte True oder False der leere Datentyp Operationen +-*/ div mod ** s.o. and, or, not Zusammengesetzte Datentypen Sequentielle Datentypen String Tupel Liste Dictionary Feld bzw. Array (nicht in Python) Zeichenketten Definition eigener Datentypen Durch die Definition eigener Datentypen kann man eine Schnittstelle mit selbst definierten Operationen auf diesen Typen erschaffen und gewinnt damit Typsicherheit. In Python werden neue Datentypen durch das Schlüsselwort class erstellt. Die Inititialisierungsfunktion ist vordefiniert, kann aber überschrieben (überladen) werden. In der Klassendefinition sind dazu die auf dem Typ möglichen Operationen definiert. Funktionale Programmierung In Haskell gibt es ebenfalls vordefinierte Typen: Typ Bemerkung Int 4 Byte Integer long integer Float, Double Char ein Zeichen Bool True oder False String Zeichenkette Tupel uneränderlich, nicht notwendig typgleich Liste Aufzählung gleichen Typs Algebraische Datentypen in Haskell Benutzerspezifische Datentypen können in Haskell als algebraische Typen bezeichnet. Sie haben folgende Notation: data Typname = Wert1 | Wert2 | Wert3 | ... | Wertn deriving (Show,....) Beachte: Der Typname muss mit einem Großbuchstaben beginnen, ebenso die einzelnen Werte (Konstruktoren). Die Konstruktoren können aufzählende Form besitzen (Enumerationstypen) oder zusätzliche Argumente beinhalten. Zur Anzeige und zum Vergleich müssen bei der Definition eines algebraischen Typs entsprechende Eigenschaften aus dem Klassensystem von Haskell übernommen werden. Dies geschieht durch die Angabe von deriving (Eq,...). So kann Haskell etwa ohne die Angabe von Show ein Ergebnis nicht anzeigen, Eq ist zum Vergleichen von Daten des definierten Typs und Ord zum Definieren einer Ordnung (<, >) auf diesem Typ nötig. Um seine Ergebnisse komfortabler anzeigen zu lassen, kann man eine eigene Show-Funktion als Instanz der eingebauten Show-Funktionen definieren, hier als Beispiel für einen eigenen Listentyp: instance (Show a) => Show (Listen a) where show = showListen showListen L = "[]" showListen (C a b) = show a ++ "-" ++ (showListen b) J. Geschinsky Archenhold-Oberschule LK- Informatik Datentypen und Datenstrukturen