Em uma pergunta recente , recebi sugestões para discutir, entre outras coisas, o aspecto do JavaScript em que funções são objetos de 'primeira classe'. O que a 'primeira classe' significa neste contexto, em oposição a outros objetos?
EDIT (Jörg W Mittag): duplicado exato: "O que é uma construção de programação de primeira classe?"
javascript
ProfK
fonte
fonte
Respostas:
Para citar a Wikipedia :
Esta página também ilustra muito bem:
leia também o comentário de TrayMan, interessante ...
fonte
A noção de "funções de primeira classe" em uma linguagem de programação foi introduzida pelo cientista britânico da computação Christopher Strachey na década de 1960. A formulação mais famosa desse princípio está provavelmente em Estrutura e Interpretação de Programas de Computador, de Gerald Jay Sussman e Harry Abelson:
Basicamente, isso significa que você pode fazer com funções tudo o que pode fazer com todos os outros elementos na linguagem de programação. Portanto, no caso do JavaScript, significa que tudo o que você pode fazer com um Inteiro, uma String, uma Matriz ou qualquer outro tipo de Objeto, também pode ser usado com funções.
fonte
Aprovação mais completa da formulação de Strachey-Sussman-Abelson. Portanto, se o seu idioma suportar essa construção, você terá uma função como idioma de primeira classe :)
Em resumo, qualquer coisa é um objeto de primeira classe se ele age na linguagem como um tipo de objeto ou tipo de manipulação de estado. Simplesmente algo em que você pode operar, repassar declarações e avaliar expressões ao mesmo tempo. Ou ainda mais: quando você pode pensar em uma função como um objeto que pode ser chamado adicionalmente.
fonte
Funções JavaScript são funções de primeira classe, o que significa que funções e objetos são tratados como a mesma coisa. As funções podem ser armazenadas como uma variável dentro de um objeto ou matriz, assim como podem ser passadas como argumento ou retornadas por outra função. Isso torna a função "cidadãos de primeira classe em JavaScript"
O JavaScript usa sintaxe de notação literal, o que dificulta a compreensão completa do fato de que nas funções JavaScript são objetos.
Por exemplo..
ambas as declinações são equivalentes. Usando
new
, estamos chamando a função construtora de um Objeto. Também usando{}
(atalho JavaScript chamado literals) estamos chamando a função de construção de um Object.{}
é apenas uma representação mais curta para instanciar o construtor.A maioria dos idiomas usa
new
palavras-chave para criar um objeto, então vamos criar um objeto JavaScript.Como você vê, criamos um nome de objeto função de .
Criando a mesma função de nome de objeto usando a expressão da função JavaScript.
Aqui vamos nós, apenas criamos uma função de nome de objeto.
fonte
No javascript, as funções são objetos de primeira classe, porque podem fazer muito mais do que objetos.
Function instanceof Object //returns true
Como um objeto, uma função pode ter propriedades e um link para sua função construtora.
fonte
Teste simples. Se você pode fazer isso na sua linguagem (Python como exemplo):
Seu idioma está tratando funções como objetos de primeira classe.
fonte
Isso significa que funções são objetos, com um tipo e um comportamento. Eles podem ser construídos dinamicamente, passados como qualquer outro objeto, e o fato de serem chamados faz parte de sua interface.
fonte
Isso significa que a função realmente herda de Object. Para que você possa distribuí-lo e trabalhar com ele como em qualquer outro objeto.
No c #, no entanto, você precisa abster-se de delegar ou refletir para brincar com as funções. (isso ficou muito melhor recentemente com expressões lambda)
fonte
A definição no site da Mozilla é concisa e clara. De acordo com eles,
E
fonte
Eu acho que quando algo é de primeira classe em um idioma, significa que é suportado por sua sintaxe, e não por uma biblioteca ou açúcar sintático. por exemplo, classes em C não são de primeira classe
fonte
Simples em JavaScript, funções são objetos de primeira classe, ou seja, funções são do tipo Objeto e podem ser usadas de maneira de primeira classe como qualquer outro objeto (String, Array, Number, etc.), pois são objetos de fato si mesmos. Eles podem ser “armazenados em variáveis, passados como argumentos para funções, criados dentro de funções e retornados de funções
fonte