Для изучения темы рассмотрим пример создания класса фигуры четырехугольника Rectangle
import 'dart:math';
class Rectangle {
int width;
int height;
Point origin;
}
main() {} // На данном этапе у нас выведется ошибка инициализация переменных класса
В Dart обязательно нужно инициализировать переменные члены класса, иначе выведется ошибка вида
Non-nullable instance field 'width' must be initialized
Чтобы исправить это, мы можем назначить переменным начальные значения или же можем написать конструктор, который автоматически инициализирует переменные, которые через нее будут передаваться и более того, мы можем указать значения по умолчанию
import 'dart:math';
class Rectangle {
int width;
int height;
Point origin;
/*
//Без начальной инициализации и без тела
Rectangle(this.origin, this.width, this.height);
//Без начальной инициализации с телом
Rectangle(this.origin, this.width, this.height){
this.origin = origin;
this.width = width;
this.height = height;
}
*/
//С начальной инициализации и без тела
//Этот конструктор использует необязательные именованные параметры.
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
}
main() {} // Теперь ок
Резюмируя можно подвести итоги
this.origin
,this.width
и this.height
используют сокращенный прием для назначения переменных экземпляра внутри объявления конструктора.this.origin
,this.width
иthis.height
— необязательные именованные параметры. Именованные параметры заключаются в фигурные скобки ({}
).- Синтаксис
this.origin = const Point(0, 0)
определяет значение по умолчаниюPoint(0,0)
для исходной переменной экземпляра. Указанное значение по умолчанию должно быть константой времени компиляции. Этот конструктор предоставляет значения по умолчанию для всех трех переменных экземпляра.