Eine Nachricht höherer Ordnung ( Higher Order Message, HOM ) in einer Programmiersprache ist eine Form der Programmierung höherer Ordnung , die es ermöglicht, Nachrichten mit anderen Nachrichten als Argumenten zu verwenden. Das Konzept wurde 2003 auf dem MacHack von Marcel Weiher eingeführt [ 1 ] [ 2 ] und 2005 von Marcel Weiher und Stéphane Ducasse ausführlicher dargestellt [ 3 ] . Schleifen können geschrieben werden, ohne die durchlaufenen Sammlungen zu benennen; Nachrichten höherer Ordnung können als eine Form der punktfreien oder impliziten Programmierung betrachtet werden .

Beispiele

In normalem Smalltalk- Code, ohne Verwendung von HOM, würde das Erhalten einer Liste der Mitarbeiter mit einem Gehalt von 1000 mit folgendem Code erreicht:

salaried := employees select: [ : each | each hasSalary: 1000 ] 

Mit Hilfe der HOM-Methode lässt sich dies jedoch wie folgt ausdrücken:

salaried := employees select hasSalary: 1000 .

Hierbei selecthandelt es sich um eine Nachricht höherer Ordnung, die hasSalary:auf die `select`-Nachricht selbst und nicht auf deren Ergebnis angewendet wird. Die Smalltalk-Sprache wurde nicht für diese Funktion angepasst. Stattdessen selectgibt sie eine Nachricht zurück, die die `send`-Anweisung reifiziertselect und diese anschließend interpretiert hasSalary:.

Ein weiteres Beispiel ist die Verwendung zukünftiger Nachrichtensendungen im Croquet-Projekt : [ 4 ]

( cube future: 1000 ) addRotationAroundY: 10 .

In diesem Beispiel future:bewirkt die Nachricht, dass die addRotationARoundY:Nachricht nach 1 Sekunde an das Würfelobjekt gesendet wird.

Annahme

Die Referenzimplementierung in Objective-C nutzt die Eigenschaft, dass Objekte in Objective-C, die eine an sie gesendete Nachricht nicht verstehen, diese dennoch über eine spezielle Hook-Methode erhalten forward:. Nachrichtenübermittlung höherer Ordnung wurde in einer Reihe von Sprachen implementiert, die diese Funktion teilen, darunter Ruby und Smalltalk. [ 5 ] [ 6 ]

Die Dokumentation von ECMAScript Harmony zu Proxies erwähnt Higher-Order-Nachrichten ausdrücklich als Anwendung für ihre Catchall-Proxies. [ 7 ]

Ähnliche Konzepte in anderen Sprachen

Die Programmiersprache J unterscheidet zwischen Verben und Adverbien . Adverbien modifizieren die Funktion von Verben. Dies ist vergleichbar mit übergeordneten Nachrichten (den Adverbien), die die nachfolgenden Nachrichten (die Verben) beeinflussen. Im obigen Croquet-Beispiel addRotationAroundY:wird die Nachricht „.“ weiterhin gesendet und behält ihre normale Bedeutung, ihre Zustellung wird jedoch durch die Nachricht „.“ modifiziert future:1000; sie wird erst später gesendet.

Referenzen

  1. ^ „MacHack HOM Präsentation“ (PDF) . Archiviert vom Original (PDF) am 27.05.2018 . Abgerufen am 15.12.2011 .
  2. ^ „MacDevCenter.com: Nachrichten höherer Ordnung in Cocoa“ . 12. November 2004. Archiviert vom Original am 12.11.2004.
  3. ^ Proceedings DLS '05 Proceedings of the 2005 symposium on Dynamic languages ​​[1]
  4. ^ „Übersicht über das Croquet-System, Seite 6“ (PDF) . Archiviert vom Original (PDF) am 26.04.2012 . Abgerufen am 18.05.2012 .
  5. ^ "SqueakSource" . www.squeaksource.com .
  6. ^ [2] Archiviert am 03.02.2012 in der Wayback Machine
  7. ^ „Harmony:proxies [ES Wiki]“ . Archiviert vom Original am 16.04.2014 . Abgerufen am 23.05.2013 .