Форум Статьи Контакты
Строительство — возведение зданий и сооружений, а также их капитальный и текущий ремонт, реконструкция, реставрация и реновация.

Объект первого класса


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

Понятие объектов первого и второго классов было предложено в 1967 г. Кристофером Стрэчи в статье «Understanding Programming Languages», где процедуры языка Алгол, в противоположность действительным числам, он сравнил с подвергающимися социальной дискриминации «людьми второго сорта» (англ. second-class citizens).

Определение

Объект называют «объектом первого класса», если он:

  • может быть сохранен в переменной или структурах данных;
  • может быть передан в функцию как аргумент;
  • может быть возвращен из функции как результат;
  • может быть создан во время выполнения программы;
  • внутренне самоопознаваем (независим от именования).

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

Примеры

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

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

Пример кода на языке Nim.

# присвоим процедуру переменной var value = proc() = echo "value" value() # вызов процедуры var value2 = value value2() # вызов процедуры # процедура будет передана другой proc two(): string = return "two" # процедура будет получать другую процедуру proc wrap(x: proc) = echo "one" echo x() echo "three" # вызов процедуры которая получает на вход другую процедуру wrap(two) # процедура, которая возвращает процедуру proc closure(x: int): proc = proc res(y:int): int = return y*y+x return res var result = closure(2) # вызовем процедуру которая вернет другую процедуру echo result(3) # вызов внутренней процедуры
(голосов:0)

Пожожие новости
Комментарии

Ваше Имя:   

Ваш E-Mail: