Функции первого класса
В информатике язык программирования имеет функции первого класса, если он рассматривает функции как объекты первого класса. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных.
Некоторые теоретики языков программирования считают необходимым условием также поддержку анонимных функций.
В языках с функциями первого класса имена функций не имеют никакого специального статуса, они рассматриваются как обычные значения, тип которых является функциональным.
Термин был впервые использован в контексте «функции как объекты первого класса» в середине 1960-х.

Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой. Простым примером функции высшего порядка будет функция "Map", которая принимает в качестве своих аргументов функцию и список и возвращает список после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал "Map", он должен поддерживать передачу функций как аргумента.

Существуют некоторые сложности в реализации передачи функций как аргументов и возвращении их как результата, особенно в присутствии нелокальных переменных, введённых во вложенных и анонимных функциях. Исторически они были названы проблемами фунарга, от английского «function argument».
В ранних императивных языках программирования эти проблемы обходились путём отказа от поддержки возвращения функций как результата или отказа от вложенных функций и следовательно нелокальных переменных (в частности, C). Lisp, один из первых функциональных языков программирования, применяет подход динамической области видимости, где нелокальные переменные возвращают ближайшее определение этих переменных к точке, в которой функция была вызвана, вместо точки, в которой она была объявлена. Полноценная поддержка для лексического контекста функций первого порядка была введена в Scheme и предполагает обработку ссылок на функции как замыканий вместо чистых, что, в свою очередь, делает необходимым применение сборки мусора.
Q21198
информатике
Concept
Q9143
язык программирования
Concept
Q303462
объекты первого класса
Concept
Q567612
анонимных функций
Concept
Q5508778
функциональным
Concept
Q193076
функционального программирования
Concept
Q1474542
функций высшего порядка
Concept
Q1053064
Map
Concept
нелокальных переменных
UNK
вложенных
UNK
Q567612
анонимных функциях
Concept
Q3558387
проблемами фунарга
UNK
Q15777
C
Concept
Q132874
Lisp
Concept
None
динамической области видимости
UNK
лексического контекста
UNK
Q187560
Scheme
Concept
Q535335
замыканий
Concept
Q322202
сборки мусора
Concept
Q1344046
Функции первого класса
Concept
use
use
facet of