Objeto de primera clase

Los objetos de primera clase ( objeto de primera clase en inglés ,  entidad de primera clase, ciudadano de primera clase ) en el contexto de un lenguaje de programación particular son elementos que se pueden pasar como un parámetro, devueltos desde una función, asignados a una variable [ 1] .

El concepto de objetos de primera y segunda clase fue propuesto en 1967 por Christopher Strachey en el artículo "Understanding Programming Languages", donde comparaba los procedimientos del lenguaje Algol , en contraposición a los números reales , con "ciudadanos de segunda clase" socialmente discriminados. " ( ciudadanos ingleses  de segunda clase ) [2] .

Definición

Un objeto se denomina "objeto de primera clase" si es [3] [4] :

El término "objeto" se usa aquí en un sentido general y no se limita a los objetos del lenguaje de programación . Así, los valores de los tipos de datos más simples , como enteros y flotantes , son "objetos de primera clase" en muchos lenguajes.

Ejemplos

En C y C++ , no puede crear funciones en tiempo de ejecución, por lo que las funciones no son objetos de primera clase en esos lenguajes. Al mismo tiempo, los punteros de función se pueden pasar como un argumento y devolver desde otra función, razón por la cual las funciones en C++ a veces se denominan objetos de segunda clase .  Sin embargo, en C++ existe el concepto de objeto de función , que es un objeto de primera clase e implementa una semántica equivalente a las funciones [3] .  

En Smalltalk [5] , Scala y JavaScript [6] las funciones (métodos) y las clases son objetos de primera clase. Dado que los operadores ( +, -) son esencialmente métodos en Smalltalk, también son objetos de primera clase.

Ejemplo de código en lenguaje Nim .

# asignar el procedimiento a una variable var value = proc () = echo "value" valor () # llamada a procedimiento var valor2 = valor valor2 () # llamada a procedimiento # el procedimiento será pasado a otro proc two (): string = return "two" # el procedimiento recibirá otro procedimiento proc wrap ( x : proc ) = echo "uno" echo x () echo "tres" # llamar a un procedimiento que recibe otro procedimiento como envoltura de entrada ( dos ) # un procedimiento que devuelve un procedimiento proc closure ( x : int ): proc = proc res ( y : int ): int = return y * y + x return res var resultado = cierre ( 2 ) # llamar a un procedimiento que devolverá otro procedimiento echo resultado ( 3 ) # llamar a un procedimiento interno

Notas

  1. Scott, Michael. Pragmática del Lenguaje de Programación  (neopr.) . - San Francisco, CA: Morgan Kaufmann Publishers , 2006. - página  140 .
  2. Rod Burstall, "Christopher Strachey: comprensión de los lenguajes de programación", Computación simbólica y de orden superior 13:52 ( 2000) (enlace no disponible) . Consultado el 2 de noviembre de 2013. Archivado desde el original el 12 de agosto de 2017. 
  3. 12 Primera clase . C2.com (25 de enero de 2006). Consultado el 16 de julio de 2012. Archivado desde el original el 16 de julio de 2012.
  4. objeto de primera clase . catalysoft.com. Consultado el 9 de octubre de 2010. Archivado desde el original el 6 de agosto de 2012.
  5. Funciones de primera clase en muchos lenguajes de programación (ejemplos) . Consultado el 21 de julio de 2012. Archivado desde el original el 11 de junio de 2010.
  6. Las funciones son objetos de primera clase en JavaScript (enlace descendente) . Consultado el 21 de julio de 2012. Archivado desde el original el 27 de julio de 2012.