跳到主要內容

prefer_final_fields

穩定
建議
可修正

私有欄位可以宣告為 final

詳細資訊

#

出自Effective Dart

建議 將未在函式庫中重新賦值的私有欄位宣告為 final

盡可能將欄位宣告為 final 是一種良好的實務,因為這有助於避免意外的重新賦值,並允許編譯器進行最佳化。

不良示範

dart
class BadImmutable {
  var _label = 'hola mundo! BadImmutable'; // LINT
  var label = 'hola mundo! BadImmutable'; // OK
}

不良示範

dart
class MultipleMutable {
  var _label = 'hola mundo! GoodMutable', _offender = 'mumble mumble!'; // LINT
  var _someOther; // LINT

  MultipleMutable() : _someOther = 5;

  MultipleMutable(this._someOther);

  void changeLabel() {
    _label= 'hello world! GoodMutable';
  }
}

良好示範

dart
class GoodImmutable {
  final label = 'hola mundo! BadImmutable', bla = 5; // OK
  final _label = 'hola mundo! BadImmutable', _bla = 5; // OK
}

良好示範

dart
class GoodMutable {
  var _label = 'hola mundo! GoodMutable';

  void changeLabel() {
    _label = 'hello world! GoodMutable';
  }
}

不良示範

dart
class AssignedInAllConstructors {
  var _label; // LINT
  AssignedInAllConstructors(this._label);
  AssignedInAllConstructors.withDefault() : _label = 'Hello';
}

良好示範

dart
class NotAssignedInAllConstructors {
  var _label; // OK
  NotAssignedInAllConstructors();
  NotAssignedInAllConstructors.withDefault() : _label = 'Hello';
}

啟用

#

若要啟用 prefer_final_fields 規則,請在您的 analysis_options.yaml 檔案中的 linter > rules 下新增 prefer_final_fields

analysis_options.yaml
yaml
linter:
  rules:
    - prefer_final_fields

如果您改用 YAML map 語法來設定 linter 規則,請在 linter > rules 下新增 prefer_final_fields: true

analysis_options.yaml
yaml
linter:
  rules:
    prefer_final_fields: true