Obiect de primă clasă

Obiectele de primă clasă ( în limba engleză  obiect de primă clasă , entitate de primă clasă, cetățean de primă clasă ) în contextul unui anumit limbaj de programare sunt elemente care pot fi trecute ca parametru, returnate dintr-o funcție, atribuite unei variabile [ 1] .

Conceptul de obiecte de clasa I și II a fost propus în 1967 de Christopher Strachey în articolul „Înțelegerea limbajelor de programare”, unde a comparat procedurile limbajului Algol , spre deosebire de numerele reale , cu „cetățeni de clasa a doua” discriminați social. ” ( cetățeni englezi  de clasa a doua ) [2] .

Definiție

Un obiect este numit „obiect de primă clasă” dacă este [3] [4] :

Termenul „obiect” este folosit aici într-un sens general și nu se limitează la obiectele limbajului de programare . Astfel, valorile celor mai simple tipuri de date , cum ar fi integer și float , sunt „obiecte de primă clasă” în multe limbi.

Exemple

În C și C++ , nu puteți crea funcții în timpul execuției, așa că funcțiile nu sunt obiecte de primă clasă în acele limbaje. În același timp, indicatorii de funcție pot fi trecuți ca argument și returnați de la o altă funcție, motiv pentru care funcțiile din C++ sunt uneori numite obiecte de clasa a doua .  Totuși, în C++ există conceptul de obiect funcție , care este un obiect de primă clasă și implementează o semantică echivalentă cu funcțiile [3] .  

În Smalltalk [5] , Scala și JavaScript [6] funcțiile (metodele) și clasele sunt obiecte de primă clasă. Deoarece operatorii ( +, -) sunt în esență metode în Smalltalk, ei sunt, de asemenea, obiecte de primă clasă.

Exemplu de cod în limba Nim .

# atribuiți procedura unei variabile var value = proc () = echo "valoare" valoare () # apel de procedură var valoare2 = valoare valoare2 () # apel de procedură # procedura va fi transmisă unui alt proces doi (): șir = returnează „două” # procedura va primi o altă procedură proc wrap ( x : proc ) = echo „one” echo x () echo „trei” # apelați o procedură care primește o altă procedură ca împachetare de intrare ( două ) # o procedură care returnează o procedură proc closure ( x : int ): proc = proc res ( y : int ): int = return y * y + x return res var rezultat = closure ( 2 ) # apelează o procedură care va returna o altă procedură echo result ( 3 ) # apelează o procedură internă

Note

  1. Scott, Michael. Pragmatica limbajului de programare  (neopr.) . - San Francisco, CA: Morgan Kaufmann Publishers , 2006. - p  . 140 .
  2. Rod Burstall, „Christopher Strachey—Understanding Programming Languages”, Higher-Order and Symbolic Computation 13:52 ( 2000) (link indisponibil) . Consultat la 2 noiembrie 2013. Arhivat din original la 12 august 2017. 
  3. 12 Clasa I . C2.com (25 ianuarie 2006). Preluat la 16 iulie 2012. Arhivat din original la 16 iulie 2012.
  4. obiect de primă clasă . catalysoft.com. Consultat la 9 octombrie 2010. Arhivat din original pe 6 august 2012.
  5. Funcții de primă clasă în multe limbaje de programare (exemple) . Preluat la 21 iulie 2012. Arhivat din original la 11 iunie 2010.
  6. Funcțiile sunt obiecte de primă clasă în JavaScript (downlink) . Preluat la 21 iulie 2012. Arhivat din original la 27 iulie 2012.