Førsteklasses objekt

Objekter af første klasse ( engelsk  førsteklasses objekt , førsteklasses enhed , førsteklasses borger ) i sammenhæng med et bestemt programmeringssprog er elementer, der kan videregives som en parameter, returneres fra en funktion, tildeles til en variabel [ 1] .

Begrebet objekter af første og anden klasse blev foreslået i 1967 af Christopher Strachey i artiklen "Understanding Programming Languages", hvor han sammenlignede procedurerne for Algol -sproget , i modsætning til reelle tal , med socialt diskriminerede "andenklasses borgere". " ( Engelske  andenrangsborgere ) [2] .

Definition

Et objekt kaldes et "førsteklasses objekt", hvis det er [3] [4] :

Udtrykket "objekt" bruges her i en generel betydning og er ikke begrænset til programmeringssprogsobjekter . Således er værdierne af de enkleste datatyper , såsom heltal og float , "førsteklasses objekter" på mange sprog.

Eksempler

I C og C++ kan du ikke oprette funktioner under kørsel, så funktioner er ikke førsteklasses objekter på disse sprog. Samtidig kan funktionsmarkører sendes som et argument og returneres fra en anden funktion, hvorfor funktioner i C++ nogle gange kaldes andenklasses objekter .  Men i C++ er der konceptet om et funktionsobjekt , som er et førsteklasses objekt og implementerer semantik svarende til funktioner [ 3] .  

I Smalltalk [5] , Scala og JavaScript [6] er funktioner (metoder) og klasser førsteklasses objekter. Da operatorerne ( +, -) i det væsentlige er metoder i Smalltalk, er de også førsteklasses objekter.

Kodeeksempel på Nim -sprog .

# tildel proceduren til en variabel var værdi = proc () = ekko "værdi" værdi () # procedurekald var værdi2 = værdi værdi2 () # procedurekald # procedure vil blive videregivet til en anden proc to (): string = returner "to" # procedure vil modtage en anden procedure proc wrap ( x : proc ) = ekko "én" ekko x () ekko "tre" # kalder en procedure, der modtager en anden procedure som inputombrydning ( to ) # en procedure, der returnerer en procedure proc lukning ( x : int ): proc = proc res ( y : int ): int = return y * y + x return res var result = closure ( 2 ) # kalder en procedure , der vil returnere et andet procedure ekkoresultat ( 3 ) # kalder en intern procedure

Noter

  1. Scott, Michael. Programmeringssprog pragmatik  (neopr.) . - San Francisco, CA: Morgan Kaufmann Publishers , 2006. - s  . 140 .
  2. Rod Burstall, "Christopher Strachey—Understanding Programming Languages", Higher-Order and Symbolic Computation 13:52 ( 2000) (link utilgængeligt) . Hentet 2. november 2013. Arkiveret fra originalen 12. august 2017. 
  3. 12 Første klasse . C2.com (25. januar 2006). Hentet 16. juli 2012. Arkiveret fra originalen 16. juli 2012.
  4. førsteklasses objekt . catalysoft.com. Hentet 9. oktober 2010. Arkiveret fra originalen 6. august 2012.
  5. Førsteklasses funktioner i mange programmeringssprog (eksempler) . Hentet 21. juli 2012. Arkiveret fra originalen 11. juni 2010.
  6. Funktioner er førsteklasses objekter i JavaScript (downlink) . Hentet 21. juli 2012. Arkiveret fra originalen 27. juli 2012.