149 votes

Qu'entend-on par «objet de première classe»?

Dans une récente question, j'ai reçu des suggestions pour parler, entre autres choses, l'aspect de JavaScript où les fonctions sont de première classe des objets. Quel est le " premier de la classe moyenne dans ce contexte, par opposition à d'autres objets?

EDIT (Jörg W Mittag): copie Exacte: "qu'est Ce qu'une classe de première de la programmation de construire?"

182voto

Sander Versluys Points 13953

Pour citer Wikipedia:

En informatique, une programmation la langue est dit à l'appui de la première des fonctions de classe (ou de la fonction littéral) s'il traite des fonctions comme les objets de première classe. Plus précisément, cela signifie que la langue prend en charge la construction de nouvelles fonctions au cours de la l'exécution d'un programme, de les stocker dans les structures de données, en les passant comme arguments à d'autres fonctions, et renvoyer les valeurs des autres fonctions.

De plus, cette page illustre magnifiquement:

Vraiment, tout comme n'importe quelle autre variable

  • Une fonction est une instance du type d'Objet
  • Une fonction peut avoir des propriétés et a un lien de retour à sa méthode de constructeur
  • Vous pouvez stocker la fonction dans une variable
  • Vous pouvez passer à la fonction en tant que paramètre à une autre fonction
  • Vous pouvez retourner à la fonction dans une fonction

lire aussi TrayMan commentaire, intéressant...

51voto

Jörg W Mittag Points 153275

La notion de "première classe"fonctions dans un langage de programmation a été introduit par les Britanniques informaticien Christopher Strachey dans les années 1960. La formulation la plus célèbre de ce principe est sans doute dans la Structure et l'Interprétation des Programmes d'Ordinateur par Gerald Jay Sussman et Harry Abelson:

  • Ils peuvent être nommés par des variables.
  • Ils peuvent être passés comme arguments aux procédures.
  • Ils peuvent être retournés que les résultats des procédures.
  • Ils peuvent être inclus dans des structures de données.

Fondamentalement, cela signifie que vous pouvez le faire avec des fonctions tout ce que vous pouvez faire avec tous les autres éléments du langage de programmation. Ainsi, dans le cas du JavaScript, cela signifie que tout ce que vous pouvez faire avec un Entier, une Chaîne de caractères, un Tableau ou tout autre type d'Objet, vous pouvez aussi le faire avec des fonctions.

15voto

Arman McHitaryan Points 847

Plus complète approbation de Strachey-Sussman Abelson de la formulation. Donc, si votre langue prend en charge une telle construction vous avez une fonction de première classe de langue :)

var men = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
men.isSweetHeart = true;

var women = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
women.isSweetHeart = true;

var aliens = function (objectOfAdmiration) {
  return objectOfAdmiration();
};

function like(obj){
  if (obj.isSweetHeart) {
      return function (){ return "Holy TRUE!"}; 
  }
  else {
      return function (){ return "Holy CRAP!"};
  }
}

alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"

alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)

//women(like(aliens)); //  Who knows? Life is sometimes so unpredictable... :)

En bref, tout ce qui est de la première classe de l'objet, si elle agit dans la langue comme une manipulation de l'état de tri d'un objet ou le type d'un objet. Tout simplement quelque chose que vous pouvez faire fonctionner et de faire passer les déclarations et les évaluer dans les expressions, dans le même temps. Ou encore plus court: quand vous pouvez penser à une fonction d'un objet qui peut en plus être invoquée.

5voto

Yuval Adam Points 59423

Test simple. Si vous pouvez le faire dans votre langage (exemple Python):

 def double(x):
    return x*x

f = double

print f(5) #prints 25
 

Votre langage traite les fonctions comme des objets de première classe.

2voto

cadrian Points 4102

Cela signifie que les fonctions sont des objets, avec un type et un comportement. Ils peuvent être construits de manière dynamique, transmis comme n'importe quel autre objet, et le fait de pouvoir être appelés fait partie de leur interface.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X