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.