":"在飞镖的类构造函数中意味着什么?

Hyd*_*cat 3 oop syntax constructor class dart

我正在阅读关于课程的dartlang.org资源,他们注意到以下结构:

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));
}
Run Code Online (Sandbox Code Playgroud)

我不太明白的是Point构造函数中的":"以及为什么/何时应该使用它?

Gün*_*uer 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;
}
Run Code Online (Sandbox Code Playgroud)

这不行

class Point {
  final num x = 3;
  constructor(num x) {
    this.x = x * 3;
  }
}
Run Code Online (Sandbox Code Playgroud)

因为无法从构造函数中修改最终字段.

初始化程序列出了一种解决此限制的方法,同时仍符合对象初始化顺序的保证.它在构造函数体之前执行.这是一种检查或修改(指定默认值)传递参数的方法,然后将它们分配给最终字段并进行一些计算.

使用this在初始化列表中只允许指定的属性,但不能读取它们,以防止访问尚未初始化属性.

对超级构造函数的调用也在初始化列表中完成,通常应该是列表中的最后一次调用.

class MyPoint extends Point {
  constructor(num x) : super(x);
}
Run Code Online (Sandbox Code Playgroud)