Объект первого класса: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
вроде бы достаточно источников для небольшой статьи
Строка 30: Строка 30:
В [[Си (язык программирования)|C]] и [[C++]] нельзя создавать функции во время выполнения программы, поэтому функции не являются объектами первого класса в этих языках. В то же время указатели на функцию можно передавать в качестве аргумента и возвращать из другой функции, поэтому иногда функции в C++ называют объектами второго класса ({{lang-en|second-class object}}). Тем не менее, в C++ есть понятие функционального объекта ({{lang-en|function object}}), который является объектом первого класса и реализует эквивалентную функциям семантику.<ref name="c2FirstClass" />
В [[Си (язык программирования)|C]] и [[C++]] нельзя создавать функции во время выполнения программы, поэтому функции не являются объектами первого класса в этих языках. В то же время указатели на функцию можно передавать в качестве аргумента и возвращать из другой функции, поэтому иногда функции в C++ называют объектами второго класса ({{lang-en|second-class object}}). Тем не менее, в C++ есть понятие функционального объекта ({{lang-en|function object}}), который является объектом первого класса и реализует эквивалентную функциям семантику.<ref name="c2FirstClass" />


В [[Smalltalk]] и [[JavaScript]] функции (методы) и классы являются объектами первого класса. Поскольку операторы (<code>+</code>, <code>-</code>) в Smalltalk суть методы, они также являются объектами первого класса.
В [[Smalltalk]] и [[JavaScript]]<ref>[http://helephant.com/2008/08/19/functions-are-first-class-objects-in-javascript/ Functions are first class objects in JavaScript]</ref> функции (методы) и классы являются объектами первого класса. Поскольку операторы (<code>+</code>, <code>-</code>) в Smalltalk суть методы, они также являются объектами первого класса.


== Примечания ==
== Примечания ==

Версия от 13:13, 21 июля 2012

Объектами первого класса («first-class object») в контексте конкретного языка программирования называются сущности, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.[1]

Термин был впервые использован в контексте «функции как объекты первого класса» в середине 1960-х.[2]

Определение

Объект называют «объектом первого класса» когда он[3][4]:

Термин «объект» используется здесь в общем смысле, и не ограничивается объектами языка программирования. Так значения простейших типов данных, например integer и float, во многих языках являются «объектами первого класса».

Примеры

В C и C++ нельзя создавать функции во время выполнения программы, поэтому функции не являются объектами первого класса в этих языках. В то же время указатели на функцию можно передавать в качестве аргумента и возвращать из другой функции, поэтому иногда функции в C++ называют объектами второго класса (англ. second-class object). Тем не менее, в C++ есть понятие функционального объекта (англ. function object), который является объектом первого класса и реализует эквивалентную функциям семантику.[3]

В Smalltalk и JavaScript[5] функции (методы) и классы являются объектами первого класса. Поскольку операторы (+, -) в Smalltalk суть методы, они также являются объектами первого класса.

Примечания

  1. Scott, Michael. Programming Language Pragmatics. — San Francisco, CA : Morgan Kaufmann Publishers, 2006.
  2. Rod Burstall, «Christopher Strachey—Understanding Programming Languages», Higher-Order and Symbolic Computation 13:52 (2000)
  3. 1 2 First Class. C2.com (25 января 2006). Дата обращения: 16 июля 2012. Архивировано 16 июля 2012 года.
  4. first class object. Catalysoft.com. Дата обращения: 9 октября 2010.
  5. Functions are first class objects in JavaScript