Первоклассный гражданин

редактировать

В языке программирования, первоклассный гражданин (также тип, объект, объект или значение ) в данном программа Язык - это объект, который поддерживает все операции, обычно доступные другим объектам. Эти операции обычно включают передачу в качестве аргумента, возвращение из функции, изменение и присвоение переменной.

Содержание

  • 1 История
  • 2 Примеры
  • 3 Функции
  • 4 Отражение
  • 5 См. Также
  • 6 Ссылки

История

Концепция объектов первого и второго класса была введена Кристофером Стрейчи в 1960-х годах. На самом деле он не определил термин строго, но противопоставил действительные числа и процедуры в АЛГОЛе :

Объекты первого и второго класса. В АЛГОЛе действительное число может появляться в выражении или быть присвоено переменной, и любой из них может появляться как фактический параметр при вызове процедуры. С другой стороны, процедура может появляться только в другом вызове процедуры либо как оператор (наиболее распространенный случай), либо как один из фактических параметров. Нет других выражений, включающих процедуры или результаты которых являются процедурами. Таким образом, в некотором смысле процедуры в ALGOL являются гражданами второго сорта - они всегда должны появляться лично и никогда не могут быть представлены переменной или выражением (за исключением случая формального параметра)...

Робин Попплстоун дал следующее определение: Все предметы имеют определенные основные права.

  • 1. Все элементы могут быть фактическими параметрами функций
  • 2. Все элементы могут быть возвращены как результаты функций
  • 3. Все элементы могут быть предметом операторов присвоения
  • 4. Все элементы можно проверить на равенство.

В 1990-е годы Рафаэль Финкель предложил определения значений второго и третьего класса, но эти определения не получили широкого распространения.

Примеры

Простейшие скалярные типы данных, такие как целые числа и числа с плавающей запятой, почти всегда первоклассны.

Во многих старых языках массивы и строки не являются первоклассными: они не могут быть назначены как объекты или переданы как параметры подпрограмме. Например, ни Fortran IV, ни C не поддерживают присвоение массивов, и когда они передаются в качестве параметров, фактически передается только позиция их первого элемента - их размер теряется. Кажется, что C поддерживает присвоение массиву указателей, но на самом деле это просто указатели на первый элемент массива и опять же не несут размер массива.

В большинстве языков типы данных не являются объектами первого класса, хотя в некоторых объектно-ориентированных языках классы являются объектами первого класса и являются экземплярами метаклассы.

Некоторые языки поддерживают продолжения и GOTO -labels вообще как объекты, не говоря уже о первоклассных объектах.

КонцепцияОписаниеЯзыки
первоклассная функция закрытие и анонимные функции Схема, ML, Haskell, F#, Kotlin, Scala, Swift, PHP, Python, Raku, JavaScript, Delphi
первоклассный контроль продолжения Схема, ML, F#
первоклассный тип зависимые типы Coq, Идрис, Agda
первоклассный тип данных . C ++ 11
полиморфизм первого класса непредикативный полиморфизм
сообщение первого класса динамическое сообщения (вызовы методов)Smalltalk, Цель -C
метакласс Smalltalk, Objective-C, Ruby, Python, Delphi
первоклассный доказательстваCoq, Agda

Функции

Многие языки программирования поддерживают передачу и возвращение значений функций, которые могут применяться к аргументам. Достаточно ли этого для первоклассного вызова значений функции - это вопрос.

Некоторые авторы требуют, чтобы во время выполнения была возможность создавать новые функции, чтобы называть их «первоклассными». В результате функции в C не являются объектами первого класса; вместо этого их иногда называют объектами второго класса, потому что ими все еще можно манипулировать большинством вышеперечисленных способов (с помощью указателей на функции ).

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

Отражение

Некоторые языки, такие как Java и PHP, имеют явную подсистему отражения, которая разрешает доступ к внутренним структуры реализации, даже если они недоступны или недоступны для управления так же, как обычные объекты.

См. Также

Ссылки

Последняя правка сделана 2021-05-20 05:05:32
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте