Jump to content

Сообщение высшего порядка

Сообщение высшего порядка ( 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 сообщение, оно будет отправлено когда-нибудь в будущем.

  1. ^ Презентация MacHack HOM
  2. ^ Статья О'Рейли в macdevcenter
  3. ^ Продолжается DLS '05 Материалы симпозиума 2005 г. по динамическим языкам [1]
  4. ^ «Обзор системы крокета, страница 6» (PDF) . Архивировано из оригинала (PDF) 26 апреля 2012 г. Проверено 18 мая 2012 г.
  5. ^ http://www.squeaksource.com/LazyCollections.html , [2] Архивировано 3 февраля 2012 г. в Wayback Machine.
  6. ^ http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy#higher-order_messages
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d2b0018133324a8e92c7f784306e68c5__1661820960
URL1:https://arc.ask3.ru/arc/aa/d2/c5/d2b0018133324a8e92c7f784306e68c5.html
Заголовок, (Title) документа по адресу, URL1:
Higher order message - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)