20

ダーツには という概念がありfinalます。ほとんどの動的言語には、この概念がありません。

final とは何ですか? 何に使用しますか?

4

1 に答える 1

25

final変数には任意の値を含めることができますが、一度割り当てられると、最終的な変数を他の値に再割り当てすることはできません。

例えば:

main() {
  final msg = 'hello';
  msg = 'not allowed'; // **ERROR**, program won't compile
}

finalオブジェクト内のインスタンス変数にも使用できます。コンストラクタ本体を実行する前に、クラスの final フィールドを設定する必要があります。final 変数には新しい値を設定できないため、final フィールドには暗黙的なセッターが作成されません。

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

main() {
  var p = new Point(1, 1);
  print(p.x); // 1
  p.x = 2; // WARNING, no such method
}

これは変数に影響をfinal与えますが、変数が指すオブジェクトには影響しないことに注意してください。つまり、変数のオブジェクトを不変にfinalしません。

例えば:

class Address {
  String city;
  String state;
  Address(this.city, this.state);
}

main() {
  final address = new Address("anytown", "hi");
  address.city = 'waikiki';
  print(address.city); // waikiki
}

上記の例では、変数は final としてマークされているため、コンストラクターaddressによってインスタンス化されたオブジェクトを常に指します。new Address("anytown", "hi")ただし、オブジェクト自体はミュータブルな状態を持っているため、都市を変更することは完全に有効です。によって防止される唯一のことは、変数finalを再割り当てすることです。address

于 2012-09-14T06:14:00.360 に答える