Quando os objetos ou algo mais são considerados "de primeira classe" em uma determinada linguagem de programação e por quê? Em que eles diferem dos idiomas em que não estão?
EDITAR. Quando alguém diz "tudo é um objeto" (como em Python), ele realmente quer dizer que "tudo é de primeira classe"?
python
language-agnostic
Federico A. Ramponi
fonte
fonte
Respostas:
Em resumo, significa que não há restrições ao uso do objeto. É o mesmo que qualquer outro objeto.
Um objeto de primeira classe é uma entidade que pode ser criada dinamicamente, destruída, transmitida para uma função, retornada como um valor e ter todos os direitos que outras variáveis da linguagem de programação possuem.
Fonte .
No C ++, as próprias funções não são objetos de primeira classe, no entanto:
No C ++, classes não são objetos de primeira classe, mas instâncias dessas classes. No Python, as classes e os objetos são objetos de primeira classe. (Veja esta resposta para mais detalhes sobre classes como objetos).
Aqui está um exemplo de funções de primeira classe Javascript:
Fonte .
As entidades que não são objetos de primeira classe são chamadas de objetos de segunda classe. Funções em C ++ são de segunda classe porque não podem ser criadas dinamicamente.
Em relação à edição:
O termo objeto pode ser usado livremente e não implica ser de primeira classe. E provavelmente faria mais sentido chamar todo o conceito de 'entidades de primeira classe'. Mas em Python, eles pretendem tornar tudo de primeira classe. Acredito que a intenção da pessoa que fez sua declaração significou primeira classe.
fonte
"Quando alguém diz" tudo é um objeto "(como em Python), ele realmente quer dizer que" tudo é de primeira classe "?"
Sim.
Tudo em Python é um objeto adequado. Até coisas que são "tipos primitivos" em outros idiomas.
Você descobre que um objeto como
2
na verdade tem uma interface bastante rica e sofisticada.Como tudo é um objeto de primeira classe em Python, há relativamente poucos casos especiais obscuros.
Em Java, por exemplo, existem tipos primitivos (int, bool, double, char) que não são objetos adequados. É por isso que o Java tem que introduzir Integer, Boolean, Double e Character como tipos de primeira classe. Isso pode ser difícil de ensinar para iniciantes - não é óbvio por que tanto um tipo primitivo quanto uma classe precisam existir lado a lado.
Isso também significa que a classe de um objeto é - ela mesma - um objeto. Isso é diferente do C ++, onde as classes nem sempre têm uma existência distinta no tempo de execução.
O tipo de
2
é otype 'int'
objeto, que possui métodos, atributos e um tipo.O tipo de um tipo interno como
int
é otype 'type'
objeto. Isso também tem métodos e atributos.fonte
int
. Assim, as classes "antiga" versus "nova moda" (e em 3, não há mais classes antigas)."Primeira classe" significa que você pode operar com eles da maneira usual. Na maioria das vezes, isso significa que você pode passar esses cidadãos de primeira classe como argumentos para funções ou retorná-los de funções.
Isso é auto-evidente para objetos, mas nem sempre é tão evidente para funções ou até classes:
Este é um exemplo em C #, onde funções realmente não são objetos de primeira classe. O código acima, portanto, usa uma pequena solução alternativa (a saber, um representante genérico chamado
Action<>
) para passar uma função como argumento. Outras linguagens, como Ruby, permitem tratar classes e blocos de código pares como variáveis normais (ou, no caso de Ruby, constantes).fonte
No slide Estrutura e Interpretação de Programas de Computador , palestra 2A (1986), que por sua vez cita Christopher Stracey :
Os direitos e privilégios dos cidadãos de primeira classe:
fonte
Na IMO, essa é uma daquelas metáforas usadas para descrever as coisas em uma linguagem natural. O termo é essencialmente usado no contexto da descrição de funções como objetos de primeira classe.
Se você considerar uma linguagem orientada a objetos, podemos fornecer vários recursos aos objetos, por exemplo: herança, definição de classe, capacidade de passar para outras seções do código (argumentos do método), capacidade de armazenar em uma estrutura de dados etc. Mesmo com uma entidade que normalmente não é considerada um objeto, como funções no caso de script java, essas entidades são consideradas objetos de primeira classe.
Primeira classe essencialmente aqui significa, não tratada como segunda classe (com comportamento degradado). Essencialmente, a zombaria é perfeita ou indistinguível.
fonte