Ключевое слово required
Объясните, пожалуйста, назначение ключевого слова required
. Есть три вида присвоения в конструкторе: позиционный, значение по умолчанию и именованный с required
(чтоб его)
Пытался найти информацию, ответ на мой вопрос, не смог, пришлось сюда обращаться. Почему я не могу просто писать именованный Person({this.name, this.age})
, зачем мне нужен required
? Создаю экземпляр (см. рис), компилятор начинает ругаться. Даже при наличие обоих аргументов.
Молчу уже про один аргумент. Ясно, если конструктор с двумя параметрами, а я в главном коде пропишу только name, компилятор должен ругаться. Это же естественно. Не все аргументы назначены. На кой тут required-то?
Ответы (1 шт):
Насколько я понял основной вопрос звучит так:
Почему я не могу просто писать именованный Person({this.name, this.age}), зачем мне нужен required?
Потому что использование с этим синтаксисом конструктора Person({this.name, this.age})
означает, что параметры name
и age
опциональны.
И либо у них должно быть какое-то значение по умолчанию:
class Person{
String name;
int age;
Person({this.name='Vova', this.age=30})
}
Либо поля класса должны быть nullable
:
class Person{
String? name;
int? age;
Person({this.name, this.age})
}
А раз этого нет, то как компилятору предотвратить такой вот вызов, с учётом того что поля класса non-nullable
:
var person = Person();
Напоминаю, что параметры ({this.name, this.age})
опциональны сейчас.
Поэтому требуется слово required
.
Вообще у меня тоже много вопросов к дизайну языка Dart
, пишу на нём только из необходимости.