EDIT (Jörg W Mittag): Точный дубликат: "Что такое конструкция программирования первого класса?"
Что означает "объект первого класса"?
Ответ 1
Чтобы процитировать Wikipedia:
В информатике программирование говорят, что язык поддержки первоклассные функции (или функции буквально), если он рассматривает функции как первоклассные объекты. В частности, это означает, что язык поддерживает построение новых функций во время выполнение программы, сохранение их в структурах данных, передавая их как аргументы другим функциям и возвращая их как значения других функции.
Эта страница также иллюстрирует ее красиво:
Действительно, как и любая другая переменная
- Функция - это экземпляр типа объекта
- Функция может иметь свойства и имеет ссылку на свой конструктор
- Вы можете сохранить функцию в переменной
- Вы можете передать функцию в качестве параметра другой функции
- Вы можете вернуть функцию из функции
также читайте комментарий TrayMan, интересный...
Ответ 2
Понятие "первоклассных функций" на языке программирования было введено британским ученым-программистом Christopher Strachey в 1960-х годах. Наиболее известная формулировка этого принципа, вероятно, находится в Структура и интерпретация компьютерных программ Джеральд Джей Суссман и Гарри Абельсон:
- Они могут быть названы переменными.
- Они могут передаваться как аргументы в процедуры.
- Они могут быть возвращены в качестве результатов процедур.
- Они могут быть включены в структуры данных.
В основном это означает, что вы можете делать с функциями все, что вы можете делать со всеми другими элементами на языке программирования. Таким образом, в случае JavaScript это означает, что все, что вы можете сделать с помощью Integer, String, Array или любого другого объекта Object, также можете выполнять с функциями.
Ответ 3
Более полное одобрение формулировки Стрэхи-Суссмана-Абельсона. Поэтому, если ваш язык поддерживает такую конструкцию, у вас есть функция в качестве первоклассного языка:)
var men = function (objectOfAdmiration) {
return objectOfAdmiration();
};
men.isSweetHeart = true;
var women = function (objectOfAdmiration) {
return objectOfAdmiration();
};
women.isSweetHeart = true;
var aliens = function (objectOfAdmiration) {
return objectOfAdmiration();
};
function like(obj){
if (obj.isSweetHeart) {
return function (){ return "Holy TRUE!"};
}
else {
return function (){ return "Holy CRAP!"};
}
}
alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"
alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)
//women(like(aliens)); // Who knows? Life is sometimes so unpredictable... :)
Короче говоря, что-то является объектом первого класса, если он действует на языке как объект управления объектом или тип объекта. Просто что-то, что вы можете оперировать и обрабатывать заявления и оценивать в выражениях одновременно. Или даже короче: когда вы можете думать о функции как об объекте, который может быть дополнительно вызван.
Ответ 4
Функции JavaScript являются первоклассными функциями, означающими, что функции и объекты рассматриваются как одно и то же. Функции могут быть сохранены как переменная внутри объекта или массива, а также могут быть переданы в качестве аргумента или возвращены другой функцией. Это делает функцию "первоклассных граждан в JavaScript"
JavaScript использует синтаксис буквенного обозначения, который затрудняет полное понимание того факта, что в функциях JavaScript есть объекты.
Например..
var youObj1 = new Object();
// or
var youObj1 = {};
оба declerations эквивалентны. Используя new
, мы вызываем функцию-конструктор объекта. Кроме того, используя {}
(ярлык JavaScript, называемый литералами), мы вызываем функцию построения объекта. {}
является просто более коротким представлением для экземпляра конструктора.
В большинстве языков для создания объекта используется new
ключевое слово , поэтому можно создать объект JavaScript.
var myFunction = new Function("a", "b", 'return a_b');
Как вы видите, мы создали имя объекта .
Создание той же функции имени объекта с использованием выражения функции JavaScript..
var myFunction = function myFunction(a,b) {
return a+b;
}
Здесь мы просто создали функцию имени объекта.
Ответ 5
В javascript функции являются объектами первого класса, потому что они могут делать намного больше, чем объекты.
- Функция - это экземпляр типа объекта.
Function instanceof Object //returns true
Как и объект, функция может иметь свойства и может ссылаться на свою конструкторскую функцию.
var o = {}; // empty object 'o'
o.a = 1 ;
o.b = 2 ;
console.log(o.a); // 1
console.log(o.b); // 2
function foo(){};
foo.a = 3 ;
foo.b = 4 ;
console.log(foo.a); // logs 3
console.log(foo.b); // logs 4
Ответ 6
Простой тест. Если вы можете сделать это на своем языке (пример Python):
def double(x):
return x*x
f = double
print f(5) #prints 25
Ваш язык обрабатывает функции как объекты первого класса.
Ответ 7
Это означает, что функции являются объектами с типом и поведением. Они могут быть динамически построены, переданы как любой другой объект, и тот факт, что они могут быть вызваны, является частью их интерфейса.
Ответ 8
Это означает, что функция фактически наследует объект. Чтобы вы могли передавать его и работать с ним, как с любым другим объектом.
В С# однако вам нужно воздерживаться от делегатов или размышлений, чтобы играть с функциями. (в последнее время это заметно улучшилось с лямбда-выражениями)
Ответ 9
Я предполагаю, что когда что-то является первым классом на языке, это означает, что он поддерживается его синтаксисом, а не библиотекой или синтаксическим сахаром. например, классы в C не являются первоклассными