2012-09-14 6 views
10

Dart hat das Konzept der Kompilierzeitkonstanten. Eine Kompilierzeitkonstante wird analysiert und zur Kompilierzeit erstellt und kanonisiert.Warum hat Dart Kompilierzeitkonstanten?

Zum Beispiel, hier ist ein const Konstruktor für Point:

class Point { 
    final num x, y; 
    const Point(this.x, this.y); 
} 

Und hier ist, wie Sie es verwenden:

main() { 
    var p1 = const Point(0, 0); 
    var p2 = const Point(0, 0); 
    print(p1 == p2); // true 
    print(p1 === p2); // true 
} 

Dies ist eine nicht-offensichtliche Funktion, mit scheinbar keine Parallele zu Funktionen in anderen dynamischen Sprachen. Es gibt Einschränkungen für const Objekte, wie alle Felder müssen endgültig sein und es muss einen Const-Konstruktor haben.

Warum hat Dart Kompilierzeitkonstanten?

Antwort

10

aus der Mailingliste, Florian Loitsch schreibt:

Die Kanonisierung Eigenschaft der Kompilierung-Konstanten schön, aber nicht der Hauptgrund, sie zu haben. Der wirkliche Vorteil der Konstanten der Kompilierzeit ist, dass sie keine willkürliche Ausführung bei Konstruktion erlauben und deshalb an Orten verwendet werden können, wo wir Code ausgeführt nicht möchten. Zum Beispiel waren Initiatoren für statische Variablen zunächst auf Kompilierzeitkonstanten beschränkt, um die Ausführung bei der obersten Ebene zu vermeiden. Kurz gesagt, sie stellen sicher, dass ein Programm mit 'main' beginnt und nicht woanders.