Un mensaje de orden superior ( HOM ) en un lenguaje de programación 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 de 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 itera, los mensajes de orden superior pueden verse como una forma de programación sin puntos o tácita .
Ejemplos
En código Smalltalk ordinario , sin usar HOM, la obtención de una colección de los empleados que tienen un salario de 1000 se lograría con el siguiente código:
asalariados := empleados seleccionar: [ : cada | cada tieneSalario: 1000 ] Sin embargo, utilizando HOM, se puede expresar de la siguiente manera:
asalariados := empleados seleccionar tieneSalario: 1000 .Aquí, selectse trata de un mensaje de orden superior, y hasSalary:se entiende que se llama sobre el mensaje select en sí, en lugar de sobre su resultado. El lenguaje Smalltalk no se modificó para implementar esta característica. En cambio, selectdevuelve un mensaje que materializa el selectenvío, el cual luego interpreta el hasSalary:mensaje.
Otro ejemplo es el uso de envíos de mensajes futuros en el Proyecto Croquet : [ 4 ]
( cubo futuro: 1000 ) agregarRotaciónAlrededorY: 10 .En este ejemplo, el future:mensaje provoca addRotationARoundY:que se envíe al objeto cubo después de 1 segundo.
Adopción
La implementación de referencia en Objective-C aprovecha la característica que permite que, en Objective-C, los objetos que no comprenden un mensaje que se les envía, aun así lo reciban 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 Catchall Proxies. [ 7 ]
Conceptos similares en otros idiomas
El lenguaje de programación J distingue entre verbos y adverbios . Los adverbios modifican la función de los verbos. Esto es similar a cómo los mensajes de orden superior (los adverbios) modifican los mensajes que les siguen (los verbos). En el ejemplo de Croquet anterior, el addRotationAroundY:mensaje se envía y conserva su significado normal, pero su entrega se ve modificada por el future:1000mensaje, que se enviará en algún momento futuro.
Referencias
- ↑ "Presentación de MacHack HOM" (PDF) . Archivado del original (PDF) el 27 de mayo de 2018. Consultado el 15 de diciembre de 2011 .
- ↑ "MacDevCenter.com: Mensajes de orden superior en Cocoa" . 12 de noviembre de 2004. Archivado del original el 12 de noviembre de 2004.
- ↑ Actas del DLS '05 Actas del simposio de 2005 sobre lenguajes dinámicos
- ↑ "Descripción general del sistema de croquet, página 6" (PDF) . Archivado del original (PDF) el 26 de abril de 2012. Consultado el 18 de mayo de 2012 .
- ↑ "SqueakSource" . www.squeaksource.com .
- ↑Archivado el 3 de febrero de 2012 en Wayback Machine .
- ↑ "Harmony:proxies [ ES Wiki ] " . Archivado del original el 16-04-2014 . Recuperado el 23-05-2013 .
- paradigmas de programación