Ich habe oft Aussagen wie "Bitte machen Sie dieses Feature zu einem erstklassigen Bürger in so und so Sprache / Plattform" gesehen. Beispielsweise wird über Aufzählungen in C # /. Net gesprochen. Wann wird ein Feature in einer Programmiersprache / -plattform als "Bürger erster Klasse" eingestuft?
language-features
Gulshan
quelle
quelle
Der Begriff "erstklassiger Bürger" oder "erstklassiges Element" in einer Programmiersprache wurde in den 1960er Jahren von dem britischen Informatiker Christopher Strachey im Kontext erstklassiger Funktionen eingeführt. Die wohl bekannteste Formulierung dieses Prinzips ist die Struktur und Interpretation von Computerprogrammen von Gerald Jay Sussman und Harry Abelson:
Grundsätzlich bedeutet dies, dass Sie mit diesem Programmiersprachenelement alles tun können, was Sie mit allen anderen Elementen in der Programmiersprache tun können.
Es geht nur um "Gleichberechtigung": Sie können alle oben genannten Aufgaben ausführen, beispielsweise mit ganzen Zahlen. Warum sollte also eine andere Aufgabe anders sein?
Die obige Definition ist insofern einschränkend, als sie nur den Aspekt der Erstklassigkeit in Bezug auf das Sein von Objekten des Programms behandelt. Eine allgemeinere Definition wäre, dass eine Sache erstklassig ist, wenn man alles damit machen kann, was man auch mit anderen Dingen ähnlicher Art machen kann.
Beispielsweise sind Java-Operatoren und Java-Methoden von ähnlicher Art. Sie können neue Methoden definieren, Sie können die Namen Ihrer eigenen Methoden (etwas) frei wählen, Sie können Methoden überschreiben, Sie können Methoden überladen. James Gosling kann all das auch mit Betreibern machen, aber Sie und ich können es nicht. Ich meine, entgegen der landläufigen Meinung, Java tut Support - Betreiber Überlastung: zum Beispiel die
+
ist Betreiber überlastet fürbyte
,short
,int
,long
,float
,double
undString
, und IIRC in Java 7 auch fürBigInteger
undBigDecimal
(und wahrscheinlich ein paar habe ich vergessen), es ist nur , dass SieHabe keinen Einfluss darauf. Das macht Betreiber nach dieser zweiten Definition eindeutig zur zweiten Klasse. Beachten Sie jedoch, dass Methoden nach der ersten Definition immer noch keine erstklassigen Objekte sind. (Macht das Betreiber dritte Klasse?)quelle
Normalerweise bezieht sich dies auf ein Konstrukt, das als Parameter übergeben werden kann, als Rückgabetyp von einer Funktion definiert werden kann oder dem ein Wert zugewiesen werden kann. Normalerweise müssen Sie sie zur Laufzeit erstellen können. Zum Beispiel wäre eine Instanz einer Klasse ein erstklassiger Bürger in c ++ oder Java, eine Funktion in C jedoch nicht.
quelle
Ich würde sagen, ein Feature ist ein erstklassiger Bürger, wenn es nur von der Sprache implementiert wird.
Das heißt, es sind keine mehrsprachigen Funktionen oder eine Standardbibliothek erforderlich, um diese Funktion zu implementieren.
Beispiel:
In C / C ++ betrachte ich Funktionen nicht als Bürger erster Klasse (andere mögen).
Dies liegt daran, dass es Möglichkeiten gibt, Funktionen zu manipulieren, die direkt von der Sprache unterstützt werden, aber die Verwendung anderer Sprachfunktionen erfordern. Das Binden von Parametern an eine Funktion wird nicht direkt unterstützt, und Sie müssen einen Funktor erstellen, um diese Funktion zu implementieren.
quelle
So fügen Sie den bereits gegebenen Antworten ein Beispiel hinzu:
In WCF / C # müssen Sie derzeit ein Klassenobjekt mit einem Servicevertragsattribut kennzeichnen, damit es als Service ausgeführt wird. Es gibt nicht so etwas wie:
Eine Klasse ist ein erstklassiger Bürger in c #, ein Dienst dagegen nicht.
Hoffe das hilft
quelle