Un mensaje de orden superior ( HOM ) en un lenguaje de programación informática es una forma de programación de orden superior que permite mensajes que tienen otros mensajes como argumentos. El concepto fue introducido en MacHack 2003 [1] [2] por Marcel Weiher y presentado en una forma más completa en 2005 por Marcel Weiher y Stéphane Ducasse. [3] Los bucles se pueden escribir sin nombrar las colecciones sobre las que se realiza el bucle, los mensajes de orden superior se pueden ver como una forma de programación tácita o sin puntos .
En el código Smalltalk normal , sin utilizar HOM, obtener una colección de los empleados que tienen un salario de 1000 se lograría con el siguiente código:
asalariados := empleados seleccione: [ : cada | cada tieneSalario: 1000 ]
Sin embargo, utilizando HOM, se puede expresar de la siguiente manera:
asalariado := empleados seleccione tieneSalario: 1000 .
Aquí, select
se trata de un mensaje de orden superior y hasSalary:
se entiende que se llama en el mensaje de selección en sí, en lugar de en su resultado. El lenguaje Smalltalk no se modificó para implementar esta función. En cambio, select
devuelve un mensaje que materializa el select
envío, que luego interpreta el hasSalary:
mensaje.
Otro ejemplo es el uso de envíos de mensajes futuros en el Proyecto Croquet : [4]
( cubo futuro: 1000 ) addRotationAroundY: 10 .
En este ejemplo, el future:
mensaje hace que el addRotationARoundY:
mensaje se envíe al objeto de cubo después de 1 segundo.
La implementación de referencia en Objective-C aprovecha la característica de que en Objective-C, los objetos que no entienden un mensaje que se les envía, lo reciben igualmente en un método de enlace especial, llamado forward:
. La mensajería de orden superior se implementó en varios lenguajes que comparten esta característica, incluidos Ruby y Smalltalk. [5] [6]
La documentación de Proxies de ECMAScript Harmony menciona específicamente los mensajes de orden superior como una aplicación para sus Proxies Catchall. [7]
El lenguaje de programación J distingue entre verbos y adverbios . Los adverbios modifican el funcionamiento de los verbos. Esto es similar a los mensajes de orden superior (los adverbios) que modifican los mensajes que siguen (los verbos). En el ejemplo de Croquet anterior, el addRotationAroundY:
mensaje . todavía se envía y tiene su significado normal, pero su entrega se modifica por el future:1000
mensaje, se enviará en algún momento en el futuro.