Сообщение высшего порядка
В этой статье используются голые URL-адреса , которые неинформативны и уязвимы к порче ссылок . ( Август 2022 г. ) |
Сообщение высшего порядка ( HOM ) в языке программирования — это форма программирования высшего порядка , которая допускает сообщения, имеющие другие сообщения в качестве аргументов. Концепция была представлена на MacHack 2003. [1] [2] Марселем Вейером и представлен в более полной форме в 2005 году Марселем Вейером и Стефаном Дюкассом . [3] Циклы можно писать без именования зацикленных коллекций, сообщения более высокого порядка можно рассматривать как форму бесточечного или неявного программирования .
Примеры
[ редактировать ]В обычном коде Smalltalk , без использования HOM, получение коллекции сотрудников с зарплатой 1000 можно было бы достичь с помощью следующего кода:
salaried := employees select: [ :each | each hasSalary: 1000 ]
Однако, используя HOM, это можно выразить следующим образом:
salaried := employees select hasSalary: 1000.
Здесь, select
является сообщением более высокого порядка, и hasSalary:
Подразумевается, что он вызывается по самому сообщению выбора, а не по его результату. Язык Smalltalk не был модифицирован для реализации этой функции. Вместо, select
возвращает сообщение подтверждающее , select
send, который затем интерпретирует hasSalary:
сообщение.
Другим примером является использование будущих отправок сообщений в проекте Croquet : [4]
(cube future:1000) addRotationAroundY:10.
В этом примере future:
сообщение вызывает addRotationARoundY:
сообщение, которое будет отправлено объекту куба через 1 секунду.
Принятие
[ редактировать ]Эталонная реализация в Objective-C использует особенность, заключающуюся в том, что в Objective-C объекты, которые не понимают отправленное им сообщение, все равно доставляют его с помощью специального метода-перехватчика, называемого forward:
. Обмен сообщениями более высокого порядка был реализован во многих языках, которые разделяют эту функцию, включая Ruby и Smalltalk. [5]
В документации по прокси-серверам ECMAScript Harmony сообщения более высокого порядка упоминаются как приложение для их прокси-серверов Catchall. [6]
Похожие понятия на других языках
[ редактировать ]Язык программирования J различает глаголы и наречия . Наречия изменяют функционирование глаголов. Это похоже на сообщения более высокого порядка (наречия), изменяющие последующие сообщения (глаголы). В приведенном выше примере крокета addRotationAroundY:
. сообщение все еще отправляется и имеет свое обычное значение, но его доставка изменяется future:1000
сообщение, оно будет отправлено когда-нибудь в будущем.
Ссылки
[ редактировать ]- ^ Презентация MacHack HOM
- ^ Статья О'Рейли в macdevcenter
- ^ Продолжается DLS '05 Материалы симпозиума 2005 г. по динамическим языкам [1]
- ^ «Обзор системы крокета, страница 6» (PDF) . Архивировано из оригинала (PDF) 26 апреля 2012 г. Проверено 18 мая 2012 г.
- ^ http://www.squeaksource.com/LazyCollections.html , [2] Архивировано 3 февраля 2012 г. в Wayback Machine.
- ^ http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy#higher-order_messages