Meddelande av högre ordning

Ett meddelande av högre ordning ( HOM ) i ett datorprogrammeringsspråk är en form av högre ordningsprogrammering som tillåter meddelanden som har andra meddelanden som argument. Konceptet introducerades på MacHack 2003 av Marcel Weiher och presenterades i en mer komplett form 2005 av Marcel Weiher och Stéphane Ducasse. Slingor kan skrivas utan att namnge samlingarna som loopas över, meddelanden av högre ordning kan ses som en form av punktfri eller tyst programmering .

Exempel

I vanlig Smalltalk- kod, utan att använda HOM, skulle en samling av de anställda som har en lön på 1000 uppnås med följande kod:

         avlönade  :=  anställda  väljer:  [  :  varje  |  varje  har Lön:  1000  ] 

Men med HOM kan det uttryckas på följande sätt:

       avlönad  :=  anställda  väljer  harLön:  1000  . 

Här är select ett meddelande av högre ordning, och hasSalary: förstås anropas på själva select-meddelandet, snarare än på dess resultat. Smalltalk-språket modifierades inte för att implementera den här funktionen. Istället select ett meddelande som förstärker select send, som sedan tolkar hasSalary: -meddelandet .

Ett annat exempel är användningen av framtida meddelanden i Croquet Project :

  (  kubframtid  :  1000  )  addRotationAroundY:  10  . 

I det här exemplet orsakar meddelandet future: att meddelandet addRotationAroundY: skickas till kubobjektet efter 1 sekund.

Adoption

Referensimplementeringen i Objective-C utnyttjar egenskapen att i Objective-C, objekt som inte förstår ett meddelande som skickas till dem, ändå får det levererat i en speciell hook-metod, kallad forward: . Högre ordningsmeddelanden implementerades på ett antal språk som delar denna funktion inklusive Ruby och Smalltalk.

ECMAScript Harmonys Proxies-dokumentation nämner specifikt meddelanden av högre ordning som en applikation för deras Catchall Proxies.

Liknande begrepp på andra språk

Programmeringsspråket J skiljer mellan verb och adverb . Adverb ändrar verbens funktion. Detta liknar meddelanden av högre ordning (adverben) som modifierar meddelandena som följer (verben). I krocketexemplet ovan, addRotationAroundY: . meddelande skickas fortfarande och har sin normala betydelse, men leveransen ändras av future:1000 , det kommer att skickas någon gång i framtiden.