stringtranslate.com

Mensaje de orden superior

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 .

Ejemplos

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í, selectse 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, selectdevuelve un mensaje que materializa el selectenví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.

Adopción

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]

Conceptos similares en otros idiomas

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:1000mensaje, se enviará en algún momento en el futuro.

Referencias

  1. ^ "Presentación de MacHack HOM" (PDF) .
  2. ^ "MacDevCenter.com: mensajes de orden superior en Cocoa". 12 de noviembre de 2004. Archivado desde el original el 12 de noviembre de 2004.
  3. ^ Actas DLS '05 Actas del simposio de 2005 sobre lenguajes dinámicos [1]
  4. ^ "Descripción general del sistema de croquet, página 6" (PDF) . Archivado desde el original (PDF) el 26 de abril de 2012 . Consultado el 18 de mayo de 2012 .
  5. ^ "Fuente de chirridos". www.squeaksource.com .
  6. ^ [2] Archivado el 3 de febrero de 2012 en Wayback Machine.
  7. ^ http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy#higher-order_messages