¿Cuándo se dice que los objetos u otra cosa son de "primera clase" en un lenguaje de programación dado y por qué? ¿En qué se diferencian de los idiomas donde no están?
EDITAR. Cuando uno dice "todo es un objeto" (como en Python), ¿quiere decir que "todo es de primera clase"?
python
language-agnostic
Federico A. Ramponi
fuente
fuente
Respuestas:
En resumen, significa que no hay restricciones en el uso del objeto. Es lo mismo que cualquier otro objeto.
Un objeto de primera clase es una entidad que se puede crear dinámicamente, destruir, pasar a una función, devolver como valor y tener todos los derechos que tienen otras variables en el lenguaje de programación.
Fuente .
Sin embargo, en C ++ las funciones en sí mismas no son objetos de primera clase:
En C ++, las clases no son objetos de primera clase, pero las instancias de esas clases sí lo son. En Python, tanto las clases como los objetos son objetos de primera clase. (Consulte esta respuesta para obtener más detalles sobre las clases como objetos).
Aquí hay un ejemplo de funciones de JavaScript de primera clase:
Fuente .
Las entidades que no son objetos de primera clase se denominan objetos de segunda clase. Las funciones en C ++ son de segunda clase porque no se pueden crear dinámicamente.
En cuanto a la edición:
El término objeto puede usarse libremente y no implica ser de primera clase. Y probablemente tendría más sentido llamar a todo el concepto 'entidades de primera clase'. Pero en Python apuntan a hacer que todo sea de primera clase. Creo que la intención de la persona que hizo su declaración fue de primera clase.
fuente
"Cuando uno dice" todo es un objeto "(como en Python), ¿quiere decir que" todo es de primera clase "?"
Si.
Todo en Python es un objeto apropiado. Incluso cosas que son "tipos primitivos" en otros idiomas.
Descubres que un objeto como
2
tiene una interfaz bastante rica y sofisticada.Debido a que todo es un objeto de primera clase en Python, hay relativamente pocos casos especiales oscuros.
En Java, por ejemplo, hay tipos primitivos (int, bool, double, char) que no son objetos adecuados. Es por eso que Java tiene que introducir Integer, Boolean, Double y Character como tipos de primera clase. Esto puede ser difícil de enseñar a los principiantes: no es obvio por qué un tipo primitivo y una clase tienen que existir uno al lado del otro.
También significa que la clase de un objeto es, en sí misma, un objeto. Esto es diferente de C ++, donde las clases no siempre tienen una existencia distinta en tiempo de ejecución.
El tipo de
2
es eltype 'int'
objeto, que tiene métodos, atributos y un tipo.El tipo de un tipo incorporado como
int
es eltype 'type'
objeto. Esto tiene métodos y atributos, también.fuente
int
. Así, las "clases antiguas" versus las "clases de estilo nuevo" (y en 3, ya no hay clases de estilo antiguo)."Primera clase" significa que puede operarlos de la manera habitual. La mayoría de las veces, esto solo significa que puede pasar a estos ciudadanos de primera clase como argumentos para las funciones, o devolverlos de las funciones.
Esto es evidente para los objetos, pero no siempre es tan evidente para las funciones o incluso las clases:
Este es un ejemplo en C # donde las funciones en realidad no son objetos de primera clase. Por lo tanto, el código anterior utiliza una pequeña solución (es decir, un delegado genérico llamado
Action<>
) para pasar una función como argumento. Otros lenguajes, como Ruby, permiten tratar incluso las clases y los bloques de código como variables normales (o en el caso de Ruby, constantes).fuente
De una diapositiva en Estructura e interpretación de programas de computadora , conferencia 2A (1986), que a su vez cita a Christopher Stracey :
Los derechos y privilegios de los ciudadanos de primera clase:
fuente
OMI, esta es una de esas metáforas utilizadas para describir cosas en un lenguaje natural. El término se usa esencialmente en el contexto de describir funciones como objetos de primera clase.
Si considera un lenguaje orientado a objetos, podemos impartir varias características a los objetos, por ejemplo: herencia, definición de clase, capacidad de pasar a otras secciones de código (argumentos de método), capacidad de almacenar en una estructura de datos, etc. Si podemos hacer el lo mismo con una entidad que normalmente no se considera como un objeto, como las funciones en el caso del script java, tales entidades se consideran objetos de primera clase.
La primera clase esencialmente aquí significa, no manejado como segunda clase (con comportamiento degradado). Esencialmente, la burla es perfecta o indistinguible.
fuente