Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2001  »  01  »  Funktioneller gehts nicht  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Ein umfangreicheres Beispiel

Es soll nun ansatzweise gezeigt werden, wie man in Scheme Strukturen definieren könnte. Dabei soll der Zugriff nur über Zugriffsfunktionen erfolgen. Der Gebrauch wird so aussehen: (define-my-record name Felder) . Es wird dann eine Erzeugungsmethode make-name angelegt, sowie Methoden um auf die verschiedenen Felder lesend und schreibend zuzugreifen. Die Methoden zum Lesen werden dabei mit get- eingeleitet, die zum Schreiben mit set- .

Betrachten wir dazu unser Beispiel über die Datenkapselung in Scheme. Mit den geplanten Erweiterungen ergibt sich eine Teilautomatisierung.

(define-my-record account (name balance interest-rate))
     (let (( me (make-account ("Friedrich" 1000 0.06))))
       ((me 'get-name)) -> "Friedrich"
       (send me 'get-balance) -> 1000
       ((me 'set-balance 2000))) -> 2000

Für diese Erweiterungen kombiniert man Makros mit Funktionen. Als Beispiel die Methode für die Generierung der lesenden Zugriffe

(define (create-getter-clauses slots)
  (define (create-getter slot)
    `((,(prepend-string "get-" slot))
      (lambda () ,slot)))
  (map create-getter slots))

Sie sehen, wie die verschiedenen Scheme-Elemente zusammengefügt werden. Es wird eine interne Funktion definiert, diese in einer g). Die Ausgabe des Aufrufs der create-getter-clauses entspricht genau der im case benötigten Form. Die Zugriffsmethode wird abhängig vom Namen generiert. Wenn Sie also name in define-my-record benutzen, wird mit prepend-string "get-"name das Symbol get-name generiert. Da dies für alle Feldnamen erfolgen soll, wenden Sie die innere Methode auf alle übergebenen Elemente an ( map ). Durch den Aufruf der Funktion haben Sie dynamisch Scheme Code erzeugt!

"Eingebaut" wird dieser Code in folgendes Makro:

(define-macro define-my-record
 (lambda (name slots)
  `(define (,(make-new-record-name name)
              ,@slots)
       (lambda (message)
         (case message
        ,@(create-getter-clauses slots)
        ,@(create-setter-clauses slots)
    (else (error "Method unknown")))))))

Das Makro define-my-record erwartet einen Namen, eine Liste von Elementen ( slots ), generiert eine Erzeugungsmethode aus dem ersten Parameter, sowie aus allen Namen Elementen in slots , jeweils eine "get-" und "set-" Methode.

Im Beispiel können alle Elemente abgefragt und verändert werden. Mit etwas mehr Programmieraufwand können Sie Variablen nur zum Lesen, Typ-tests, weitere Methoden und sogar Vererbung (vergl. [7], Kapitel 11.3, S. 266) hinzufügen.

Zusammenfassung

Dieser Teil zeigte, wie wichtig Funktionen in Scheme sind und wie einfach sie eingesetzt werden können. Dies baut einerseits die Scheu ab, Funktionen als Parameter zu gebrauchen oder als Rückgabewert zu nutzen. Andererseits müssen Sie die in anderen Sprachen gewohnte Trennung von Datenstrukturen und Funktionen als hinfällig betrachten, um Lisps vorteilhaft einsetzen zu können. Diese Umstellung kann nur durch längere Beschäftigung mit funktionalen Sprachen erfolgen.

Bemerkenswert an Scheme ist sicher auch die Generierung von Code durch Makros. Es zeigt, wie eine minimalistische Sprache mit (Achtung: Modewort-Alarm) orthogonalen Programmierelementen, eine enorme Flexibilität ermöglicht.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Usage Landscape Enterprise Open Source Data Integration

Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.

Download PDF (Registrierung erforderlich)
Kommentare (0)