2016-08-25 103 views
3

我讀的班dartlang.org資源,他們注意以下幾點建設:「:」在dart的類構造函數中意味着什麼?

import 'dart:math'; 

class Point { 
    final num x; 
    final num y; 
    final num distanceFromOrigin; 

Point(x, y) 
    : x = x, 
    y = y, 
    distanceFromOrigin = sqrt(pow(x, 2) + pow(y, 2)); 
} 

我不太明白的是「:」在點構造以及爲什麼/當我應該使用它?

回答

5

它啓動「初始化程序列表」。

如果您的最終字段類似於Point類中的字段,則可以通過不同的方式對它們進行初始化。

class Point { 
    final num x = 3; 
    ... 
} 

class Point { 
    final num x; 
    constructor(this.x); 
} 

class Point { 
    final num x; 
    constructor(num x) : this.x = x * 3; 
} 

這是行不通的

class Point { 
    final num x = 3; 
    constructor(num x) { 
    this.x = x * 3; 
    } 
} 

,因爲最終的字段不能從構造方法中進行修改。

初始值設定程序列出了一種解決此限制的方法,同時仍符合有關對象初始化順序的保證。它在構造函數體之前執行。 這是一種在分配給最終字段之前檢查或修改(分配默認值)傳遞的參數並進行一些計算的方法。

在初始化程序列表中使用this只允許分配給屬性,但不允許從中讀取以防止訪問尚未初始化的屬性。

對超級構造函數的調用也在初始化程序列表中完成,通常應該是列表中的最後一個調用。

class MyPoint extends Point { 
    constructor(num x) : super(x); 
} 
+0

謝謝!你能推薦Dart資源,而不是他們的在線api和dartlang.org嗎? – Hydrocat

+1

我不知道。我從社區的討論中學到了大部分內容。 Slack,(現在也是Gitter)Google組,StackOverflow,GitHub問題 –