В недавнем вопросе я получил предложения поговорить, помимо прочего, об аспекте JavaScript, где функции являются объектами «первого класса». Что означает «первый класс» в этом контексте, в отличие от других объектов?
РЕДАКТИРОВАТЬ (Jörg W Mittag): точный дубликат: «Что такое первоклассная программная конструкция?»
javascript
ProfK
источник
источник
Ответы:
Цитировать Википедию :
Эта страница также прекрасно иллюстрирует это:
также прочитайте комментарий TrayMan, интересно ...
источник
Понятие «первоклассные функции» в языке программирования было введено британским ученым-программистом Кристофером Стрейчи в 1960-х годах. Наиболее известная формулировка этого принципа, вероятно, содержится в Структуре и интерпретации компьютерных программ Джеральда Джея Суссмана и Гарри Абельсона:
По сути, это означает, что вы можете делать с функциями все, что вы можете делать со всеми другими элементами в языке программирования. Таким образом, в случае JavaScript это означает, что все, что вы можете делать с Integer, String, Array или любым другим типом Object, вы также можете делать с функциями.
источник
Более полное одобрение формулировки Стрейчи-Суссмана-Абельсона. Так что, если ваш язык поддерживает такую конструкцию, то у вас есть функция в качестве первоклассного языка :)
Короче говоря, все является первоклассным объектом, если оно действует на языке как манипуляция состоянием типа объекта или типа объекта. Просто то, что вы можете оперировать и передавать заявления и оценивать в выражениях одновременно. Или даже короче: когда вы можете рассматривать функцию как объект, который может быть вызван дополнительно.
источник
Функции JavaScript - это функции первого класса, означающие, что функции и объекты рассматриваются как одно и то же. Функции могут быть сохранены как переменная внутри объекта или массива, а также могут быть переданы в качестве аргумента или возвращены другой функцией. Это делает функцию «первоклассными гражданами в JavaScript»
JavaScript использует синтаксис буквальной нотации, что затрудняет полное понимание того факта, что в JavaScript функции являются объектами.
Например..
оба declerations эквивалентны. Используя
new
мы вызываем функцию конструктора объекта. Также с помощью{}
(JavaScript-ярлык, называемый литералами) мы вызываем функцию построения объекта.{}
это просто более короткое представление для создания экземпляра конструктора.Большинство языков использует
new
ключевое слово для создания объекта, поэтому давайте создадим объект JavaScript.Как вы видите , мы создали имя объекта функции .
Создание той же функции имени объекта с использованием выражения функции JavaScript.
Здесь мы только что создали функцию имени объекта.
источник
В JavaScript функции являются объектами первого класса, потому что они могут делать гораздо больше, чем объекты.
Function instanceof Object //returns true
Как и объект, функция может иметь свойства и иметь ссылку на свою функцию конструктора.
источник
Простой тест. Если вы можете сделать это на своем языке (например, Python):
Ваш язык рассматривает функции как объекты первого класса.
источник
Это означает, что функции являются объектами с типом и поведением. Их можно динамически создавать, передавать как любой другой объект, и тот факт, что их можно вызывать, является частью их интерфейса.
источник
Это означает, что функция фактически наследуется от Object. Так что вы можете передать его и работать с ним, как с любым другим объектом.
Однако в c # вам нужно воздерживаться от делегатов или рефлексии, чтобы поиграться с функциями. (это стало намного лучше в последнее время с лямбда-выражениями)
источник
Определение на сайте Mozilla является кратким и ясным. Согласно им,
И
источник
Я думаю, когда что-то является первым классом в языке, это означает, что это поддерживается его синтаксисом, а не библиотекой или синтаксическим сахаром. например, классы в C не являются первоклассными
источник
Простые в JavaScript функции - это объекты первого класса, то есть функции имеют тип Object, и их можно использовать первоклассным образом, как и любой другой объект (String, Array, Number и т. Д.), Поскольку они на самом деле являются объектами. самих себя. Они могут «храниться в переменных, передаваться в качестве аргументов функциям, создаваться внутри функций и возвращаться из функций».
источник