Artikel-Schlagworte: „struct“

Scheme Kurs – Teil 3: Strukturen (struct)

Dienstag, 20. Oktober 2009

Strukturen gibt es in vielen Programmiersprachen. Sie sind auch sehr sinnvoll, denn oft gilt es, Daten zu irgendetwas zusammen zu fassen. Dabei kann es sich z.B. um eine Person handeln. Jeder Mensch hat einen Vorname, Nachname, Wohnort, etc. Da bietet sich das erstellen einer Struktur an, in der man alle Daten die zu einem Menschen gehören zusammen fasst.

In Scheme definiert man eine Struktur (engl. struct) mit:

(define-struct human (forname surename residence))

Zuerst gibt man an, dass man eine Struktur definieren möchte. Danach folgt der Name der neuen Struktur und in einer neuen Klammer alle Eigenschaften die die Struktur haben soll (Eigenschaften des Konstruktors).
Danach hat man die Struktur definiert, jetzt muss man noch eine Struktur erstellen, also einen Teil des Speichers reservieren und die bei der Strukturdefinition angegebenen Eigenschaften mit Werten füllen. Man kann auch sagen, man erstellt eine Instanz der Struktur:

(define peter-mustermann
    (make-human
        ('Peter 'Mustermann 'Berlin)))

Die Instanz erstellt man mit make-human, wobei human natürlich der Name der Struktur ist, gefolgt von einer neuen Klammer mit den Werten die die Struktur speichern soll. Man übergibt die Werte an einen sogenannten Konstruktor.

Wer bist du?

Wenn man nicht weiß, welche Struktur in einer Variable gespeichert ist, kann man dafür die sogenannte Prädikat-Prozedur nutzen.

(human? peter-mustermann) -> boolean

Die Prädikat-Prozedur ist der Name der Struktur, gefolgt von einem Fragezeichen. Als einzigen Parameter übergibt man die fragwürdige Variable. Die Prozedur gibt einen boolean-Wert zurück. In diesem Fall natürlich true.

Wie heißt du, und wo kommst du her?

Möchte man auf eine bestimmte Eigenschaft der Struktur zugreifen und deren Wert auslesen so benutzt man einen sogenannten Selektor:

(human-forename peter-mustermann)

Der Selektor ist der Name der Struktur gefolgt von dem Name der Eigenschaft die man auslesen will. Dazu muss man noch die Variable mit der entsprechenden Struktur angeben. Die Funktion gibt daraufhin den Wert zurück.

Abstraktion

Strukturen können sehr gut zur Datenabstraktion genutzt werden, denn sie vereinen zusammen gehörige Daten und helfen diese strukturierter und modularer zu verarbeiten. Des weiteren lässt sich eine Source, die mit structs arbeitet wesentlich besser lesen, somit erhöhen sie auch die Wartbarkeit von Programmen.
Die Schnittstellen zu den Strukturen stellen die Konstruktoren und Selektoren dar.