Wir haben alle Integer, Floating Point, String und den gelegentlichen Dezimaltyp gesehen. Was sind einige der merkwürdigsten oder einzigartigsten oder nützlichsten Typen, die Ihnen begegnet sind, nützlich oder nicht?
20
Wir haben alle Integer, Floating Point, String und den gelegentlichen Dezimaltyp gesehen. Was sind einige der merkwürdigsten oder einzigartigsten oder nützlichsten Typen, die Ihnen begegnet sind, nützlich oder nicht?
Antworten:
Ich werde kurz sein:
Maybe a
in Haskell.
Mit diesem einfachen Konstrukt löst die Sprache das Problem der Abstürze oder
NullPointerException
umgeht den "One Million Mistake" von Tony Hoare :)Ehrlich gesagt, eine optionale Präsenz zur Kompilierungszeit überprüft? Es ist traumhaft ...
quelle
Option
Name nicht gefällt . Warum nichtOptional
! Es kann sein, dass ich kein Muttersprachler binOption
, mir aber nicht die "optionale" Bedeutung vermittelt.Maybe
Name ist süß: "Was hast du?" "Vielleicht ein Int". Das wirklich nette daran ist jedoch, dass es sowohl ein Funktor als auch eine Monade ist, was im Klartext bedeutet, dass Sie die Null-Propagierung kostenlos erhalten. Sie müssen niemals Null-Checks in Funktionen oder in die Mitte Ihres Codes setzen. Sie müssen es, wenn überhaupt, immer nur ganz am Ende Ihres Codes überprüfen.Maybe
Monade für Ruby: lostechies.com/derickbailey/2010/10/10/the-maybe-monad-in-rubyIch bin immer gern
void *
. Es ist wahrscheinlich ein Symptom für etwas, das tief in mir steckt.quelle
void *
und Pascal / Delphi habenPointer
.Lua hat einen eingebauten Tisch , der am eindrucksvollsten ist. Es verfügt über eine eingebaute Hashtabelle und einen Vektor und kann bei Verwendung von Metatabellen die grundlegende Basis für die objektorientierte Programmierung in einer prozeduralen Sprache sein.
Jeder Index einer Tabelle kann eine der grundlegenden Sprachstrukturen erhalten (Zahl, Boolescher Wert, Zeichenfolge, Funktion - Ja, Funktionen sind Typen in lua - und Tabellen).
quelle
Ich bin überrascht, dass noch niemand Monaden oder algebraische Datentypen erwähnt hat.
quelle
Lisp hat zwei interessante Typen:
t
undnil
. Das Interessante an ihnen ist, dass alles at
und nichts a istnil
.quelle
nil
eint
?SNOBOL: Muster (im Wesentlichen ein LL (1) -Parserbaum, wenn ich mich richtig erinnere).
quelle
Fortran hat gemeinsame Blöcke; Dies ist einer der am seltensten vorkommenden Datentypen in modernen Sprachen oder eher eine ungewöhnliche Art, Daten effizient auszutauschen.
Fortran 95 verfügt über Intervalltypen und integrierte Intervallarithmetik.
Ohne die in Haskell vorkommenden monadischen Typen wäre die Liste nicht vollständig . Um sie zu verstehen, muss man sich ein wenig anstrengen.
quelle
Delphi hat Mengen ( siehe auch ), von denen ich glaube, dass sie in anderen Sprachen nicht auf die gleiche Weise implementiert sind.
Dadurch wird das Speichern von Attributen mit mehreren Variablen in Datenbanken zum Kinderspiel: D
quelle
Ich nehme an, es ist wirklich nur seltsam, auf einer klassischen Architektur zu programmieren, aber sicherlich war einer der schwierigsten Typen für mich, meinen Kopf zuerst herumzureißen, das Quantenregister , das in QCL auftaucht .
quelle
Mit PL / SQL können Sie Variablen vom Typ deklarieren
my_table.some_column%type
... Das finde ich verdammt nützlich.Mit C # können Sie Objekte als nullbar oder nicht deklarieren, obwohl ich nicht sicher bin, ob dies als Typ gilt.
quelle
cursor%rowtype
ist noch lustiger: Es handelt sich um einen dynamisch geformten Datensatztyp, der angibt, welche Spalten die Cursorabfrage zurückgibt.Als ich jünger war, hatte ich ein Faible für Euphorias Datentypen
Es ist wie folgt aufgebaut:
Sequenz = Eine Sequenz von Objekten
Siehe: Das Referenzhandbuch
Hinweis: "jon" ist eigentlich eine Kurzform zum Schreiben der Folge von ASCII-Werten. Zum Beispiel
"ABCDEFG"
ist das gleiche wie{65, 66, 67, 68, 69, 70, 71}
quelle
Felix hat anonyme Summentypen. Der Typ ist wie folgt geschrieben:
wie es theoretisch sein würde. Die Werte sind hässlich:
außer vielleicht für eine Einheitssumme wie
3 = 1 + 1 + 1
die unglücklicherweise die Nullursprungszählung für "C-Kompatibilität" verwendet. Anonyme Summen sind für strukturell typisierte algebraische Typen erforderlich, zum Beispiel:
ist eine (einfach verknüpfte) Liste von T. Alle anderen Sprachen, die ich kenne, benötigen nominell typisierte Summen, wobei sowohl der Typ selbst als auch die Konstruktoren benannt werden müssen.
Die oben verwendete Kurzschrift 3 ist niedlich, die folgende befindet sich in der Bibliothek:
und diese Notation:
ist ein Array der statischen Länge 3. Die 3 ist keine ganze Zahl, sondern eine Summe von 3 Einheiten. Wie schade + ist nicht assoziativ :)
quelle
In q / kdb + sind Tabellen integriert. Da es sich um eine Programmiersprache und eine spaltenorientierte Datenbank handelt, sind weder LINQ noch ORMs erforderlich.
Zum Beispiel kann eine Tabelle wie diese erstellt werden (die Zuweisung unterscheidet sich
:
eher=
von der in den meisten Sprachen):Jetzt kann ich auf meinen Tisch schauen:
Und ich kann es abfragen:
quelle
Ich fand Gewerkschaften in C ++ 'schrullig', als ich zum ersten Mal von ihnen hörte. Ich habe noch kein Szenario getroffen, in dem sie die naheliegende Wahl für die Implementierung sind.
quelle
Ich versuche immer noch, mir Gedanken darüber zu machen, was aus einer Multiparameter-Funktion in F # und anderen funktionalen Sprachen wird. Grundsätzlich int f (Foo, Bar) wird func f (Foo)
Dies ist die Zwei-Parameter-Funktion, die ein Foo und einen Takt und ein int zurückgibt. Dies ist eine Ein-Parameter-Funktion, die ein Foo und eine Ein-Parameter-Funktion zurückgibt, die einen Takt und ein int zurückgibt. Aber irgendwie kann man es mit zwei Parametern aufrufen, wenn man will. Ich habe hier einen Beitrag darüber geschrieben
quelle
f(Foo, Bar)
dieselbe wie eine Funktionf(Foo)
, die eine andere Funktionf'(Bar)
zurückgibt, die den Wert zurückgibt, der zurückgegeben werdenf(Foo, Bar)
würde. Das heißt, wenn Sie das Argument 'Foo' korrigieren, aber nicht 'Bar', haben Sie eine Funktion, die nicht von 'Foo' abhängt, aber immer noch vom Argument 'Bar' abhängt. Dies ist typisch für funktionale Sprachen. es heißt "currying".Reguläre Ausdrücke:
Sie sind extrem leistungsfähige und dennoch kompakte Objekte.
Sprachen, in denen sie eingebaut sind, können Text sehr gut manipulieren (lassen Sie uns das Wort nicht hören, wenn sie nicht so gut sind).
quelle
Eine Handvoll Sprachen in der funktionalen Familie haben eine Klasse von Typen, die als Einheit bekannt sind. Das Unterscheidungsmerkmal von Unity-Typen besteht darin, dass sie keine Informationen enthalten und Null-Bit-Typen sind. Ein Einheitstyp (in einigen Variationen) ist auch sein einziger Wert oder (in den meisten anderen) hat nur einen Wert (der selbst kein Typ ist).
Diese sind jedoch nützlich, da es sich um unterschiedliche Typen handelt. Da Sie nicht implizit von einem Einheitstyp in einen anderen konvertieren können, können Sie die statische Typprüfung sehr effizient und aussagekräftig einsetzen.
Einheit ist auch die Art und Weise, wie solche Sprachen Enums beschreiben, indem sie einem neuen Typ erlauben, eine definierte Menge anderer Typen zu sein, oder vielleicht Typen zu beschreiben , Werte, die entweder ein Wert eines typischen Typs sein können (z. B. eine Ganzzahl). oder einen Wert haben, der keinen Wert darstellt.
Einige Sprachen, die nicht den Reichtum an benutzerdefinierten Einheitstypen verwenden, enthalten in der einen oder anderen Form immer noch eine Einheit. Zum Beispiel Python hat mindestens drei Einheitstypen
NoneType
,NotImplementedType
undEllipsisType
. Es ist interessant, dass die ersten beiden Werte so etwas wie "Kein Wert" bedeuten, aber der dritte Wert wird in komplexen Werten (insbesondere in Slice-Ausdrücken) verwendet, um interessante Sonderfälle darzustellen.Weitere interessante Beispiele für Unity sind
NULL
SQL undundefined
Javascript, jedoch nichtvoid
C oder C ++.void
scheitert. Obwohl es einen Wert ohne Information beschreibt, kann kein tatsächlicher Wert vom Typ seinvoid
.quelle
Rubys
symbol
Typ ist etwas ungewöhnlich. Es ist im Wesentlichen eine Zeichenfolge, die das Singleton-Muster implementiert. Oder so. Bisher habe ich festgestellt, dass Symbole am besten in Verfolgungszuständen und beim Übergeben von Funktionsnamen verwendet werden.quelle
COBOL. Im Wesentlichen nur zwei grundlegende Datentypen, Zeichenfolgen und Zahlen, aber Sie müssen genau angeben , wie sie im Speicher angeordnet sind, z
PIC S9(5)V99 COMP-3
.quelle
S
= Vorzeichen ,9(5)
= 5 Ziffern,V
= impliziter Dezimalpunkt,99
= 2 weitere Ziffern,COMP-3
= BCD + Vorzeichen-Nybble.Clipper hatte 'Codeblöcke', die anonymen Methoden ähnelten. Sie können bei Bedarf weitergegeben und ausgewertet werden, normalerweise als Rückruf. Sie werden häufig verwendet, um beispielsweise Berechnungen während der Präsentation von Datentabellen durchzuführen.
quelle
VHDL hat physikalische Typen. Ein solches Literal enthält sowohl einen Wert als auch eine Einheit. Sie können auch Untereinheiten definieren. Ein vordefinierter physikalischer Typ ist beispielsweise
time
:Zusammen mit der Überladung von Operatoren können Sie sehr interessante Dinge definieren.
quelle
Clojure ist interessant, weil es ein Meta-Konzept von "Abstraktionen" hat, die die Sprache durchziehen. Beispiele:
In gewisser Weise heben die Abstraktionen das Prinzip der " Einzelverantwortung " auf das Äußerste. Es liegt an Ihnen, sie zusammenzustellen, um die gewünschte Funktionalität zu erhalten, aber Sie können äußerst flexibel sein, wie Sie sie zusammenkleben.
Wenn Sie beispielsweise ein klassenbasiertes OOP-System mit Vererbung möchten, können Sie relativ schnell eine dieser Kernabstraktionen erstellen.
In der Praxis sind die Abstraktionen selbst so konzipiert, dass mehrere Implementierungen möglich sind, z. B. über bestimmte Schnittstellen wie clojure.lang.ISeq für Sequenzen oder clojure.lang.IFn für Funktionen höherer Ordnung.
Zu diesem Thema gibt es ein interessantes Video: Die Kunst der Abstraktion
quelle
Wenn Sie eine Sprache mit einem eindeutigen Typ wünschen, gehen Sie zu BCPL . Diese Sprache hat nur einen Datentyp, das Wort, eine feste Anzahl von Bits für die Sprachimplementierung.
quelle
Googles Go hat einen "Channel" -Typ, der ziemlich einzigartig ist.
quelle