Я могу видеть, откуда вы, но это те же правила области видимости, что и в Java (и, соответственно, также в C #?), И нормальное поведение для параметров для методов и конструкторов.
Я думаю, что переназначить параметр с помощьюдругое значение - плохое поведение, и вы можете заставить анализатор обнаружить это, добавив следующее правило линтера к analysis_options.yaml
:
linter:
rules:
parameter_assignments
Правило описано здесь: http://dart -lang.github.io / linter / lints / parameter_assignments.html
Но я вижу, что это правило не используется для конструкторов, которые являются вашим случаем, и я думаю, что это ошибка для линтера или случай, когдадолжно быть другое правило, чтобы обнаружить назначения параметров для конструкторов. Поэтому я бы предложил вам создать здесь проблему: https://github.com/dart-lang/linter/issues
Поведение только для чтения для параметров (как для методов, так и для конструкторов) может быть достигнуто с помощью final
для каждого параметра как:
User(final String name) {
name = 'user +$name'; // error: 'name' a final variable can only be set once
}
Но это не совсем практично в том смысле, что вы хотите предотвратить несчастные случаи, когда разработчик забудет что-то сделать.
И просто для записи, вы можете присвоить значение name
в User
класс, выполнив это (если вы все еще хотите, чтобы параметр и переменная класса имели одно и то же имя):
class User {
String name;
User(String name) {
this.name = 'user +$name';
}
}