Dart 使用 class 來定義一個類。
定義一個類
class Point{
var x;
var y;
Point(x, y){
this.x = x;
this.y = y;
}
}
複製程式碼
在 Dart 中,如果一個類沒有顯示的定義預設的建構函式,會預設有一個空的建構函式。
上面的程式碼中,已經定義了一個預設建構函式了,如果需要定義新的建構函式,需要通過如下方式:
class Point{
var x;
var y;
Point(this.x, this.y);
Point.origin(){
x = 0;
y = 0;
}
}
var p = Point.origin();
複製程式碼
Point(this.x, this.y)
Dart 允許這樣書寫一個預設建構函式。
建立一個類物件
建立一個類物件的方式如下:
var p1 = Point(1, 1);
var p2 = new Point(1, 1);
複製程式碼
Dart 同時支援以上兩種建立一個類物件的方式。
new
關鍵字從 Dart 2.0
開始支援。
使用類的屬性
在 Dart 中,類所有的屬性和函式預設都是對外可見的。
var p1 = Point(1, 1);
print(p1.y);
>>>
1
p1.y = 5;
print(p1.y);
>>>
5
複製程式碼
空安全 ?.
Dart 在呼叫物件屬性前,支援先檢查物件是否為 null。
如果不為 null,才會呼叫,這和 Kotlin 十分的像。
var p;
p?.y = 5;
複製程式碼
級聯操作符 ..
先看一個例子:
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
複製程式碼
Dart 支援使用 ..
操作符編寫如上的流式語句。
當然前提是,你所呼叫的函式返回值為 void
。
初始化列表
在執行建構函式體內的表示式前,Dart 支援插入初始化操作。
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point(x, y)
: x = x,
y = y,
distanceFromOrigin = sqrt(x * x + y * y);
}
import 'dart:math';
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point(x, y)
: x = x,
y = y,
distanceFromOrigin = sqrt(x * x + y * y);
}
main() {
var p = new Point(2, 3);
print(p.distanceFromOrigin);
}
>>>
3.605551275463989
複製程式碼
get/set 函式
在 Dart 中,get/set 函式支援以下書寫方式:
class Rectangle {
num left, top, width, height;
Rectangle(this.left, this.top, this.width, this.height);
num get right => left + width;
set right(num value) => left = value - width;
num get bottom => top + height;
set bottom(num value) => top = value - height;
}
void main() {
var rect = Rectangle(3, 4, 20, 15);
assert(rect.left == 3);
rect.right = 12;
assert(rect.left == -8);
}
複製程式碼
型別檢測
使用 is
關鍵字判斷一個物件的型別是否屬於一個類。
var p = Point(1, 1);
print(p is Point);
>>>
true
複製程式碼
is!
恰好於此相反。
型別轉換
Dart 使用 as
關鍵字來進行強制型別轉換。
(emp as Person).firstName = 'Bob';
複製程式碼
獲得物件的執行時型別
通過 runtimeType
屬性,可以獲得一個物件的型別。
print('The type of a is ${a.runtimeType}');複製程式碼