Wiadomość wyższego rzędu

Wiadomość wyższego rzędu ( HOM ) w języku programowania komputerowego jest formą programowania wyższego rzędu , która umożliwia wiadomości, które mają inne wiadomości jako argumenty. Koncepcja została przedstawiona na MacHack 2003 przez Marcela Weihera i zaprezentowana w pełniejszej formie w 2005 roku przez Marcela Weihera i Stéphane'a Ducasse'a. Pętle można zapisywać bez nazywania zapętlonych kolekcji, komunikaty wyższego rzędu można postrzegać jako formę programowania bezpunktowego lub milczącego .

Przykłady

W zwykłym kodzie Smalltalk , bez użycia HOM, uzyskanie zbioru pracowników, którzy mają pensję 1000, zostałoby osiągnięte za pomocą następującego kodu:

         wynagradzani  :=  pracownicy  wybierają:  [  :  każdy  |  każdy  ma Wynagrodzenie:  1000  ] 

Jednak za pomocą HOM można to wyrazić w następujący sposób:

       wynagradzany  :=  pracownicy  wybierają  maWynagrodzenie:  1000  . 

Tutaj select jest komunikatem wyższego rzędu, a hasSalary: jest rozumiany jako wywoływany na samym komunikacie select, a nie na jego wyniku. Język Smalltalk nie został zmodyfikowany w celu zaimplementowania tej funkcji. Zamiast tego, select zwraca komunikat, który reifikuje select send , który następnie interpretuje komunikat hasSalary:.

Innym przykładem jest użycie przyszłych wiadomości wysyłanych w Projekcie Krokiet :

  ( przyszłość   sześcianu  :  1000  )  addRotationAroundY:  10  . 

W tym przykładzie komunikat future: powoduje wysłanie komunikatu addRotationARoundY: do obiektu kostki po 1 sekundzie.

Przyjęcie

Implementacja referencyjna w Objective-C wykorzystuje cechę polegającą na tym, że w Objective-C obiekty, które nie rozumieją wysłanej do nich wiadomości, nadal otrzymują ją w specjalnej metodzie przechwytującej, zwanej forward: . Wiadomości wyższego rzędu zostały zaimplementowane w wielu językach, które dzielą tę funkcję, w tym Ruby i Smalltalk.

Dokumentacja ECMAScript Harmony's Proxies wyraźnie wymienia komunikaty wyższego rzędu jako aplikację dla ich Catchall Proxy.

Podobne pojęcia w innych językach

Język programowania J rozróżnia czasowniki i przysłówki . Przysłówki modyfikują działanie czasowników. Jest to podobne do komunikatów wyższego rzędu (przysłówków) modyfikujących komunikaty, które następują (czasowniki). W powyższym przykładzie krokieta addRotationAroundY: . wiadomość jest nadal wysyłana i ma swoje normalne znaczenie, ale jej dostarczenie jest modyfikowane przez future:1000 , zostanie ona wysłana kiedyś w przyszłości.