Излишне ли делать финальные переменные закрытыми в dart? - PullRequest
0 голосов
/ 27 июня 2019

Следующий класс имеет несколько параметров, но только некоторые должны быть окончательными;мой вопрос, должен ли я также сделать эти последние переменные частными, или это будет избыточно?

class Car {
    final double _galInFullTank;
    get galInFullTank => _galInFullTank;
    double _miDrivenToEmpty;
    get miDrivenToEmpty => _miDrivenToEmpty;
    double _mpg;
    get mpg => _mpg;

    void update(double newMiDrivenToEmpty) {
        _miDrivenToEmpty = newMiDrivenToEmpty;
        _mpg = _miDrivenToEmpty/_galInFullTank;
    }

    Car({galInFullTank = 12, miDrivenToEmpty = 300}) :
        _galInFullTank = galInFullTank,
        _miDrivenToEmpty = miDrivenToEmpty,
        _mpg = miDrivenToEmpty/galInFullTank;
    }
}

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Создание частного участника final не является избыточным.В общем, быть личным и быть final ортогональным.Например, рассмотрим что-то вроде:

class Foo {
  final List<int> someList;
}

То, что Foo.someList есть final, не мешает внешнему коду изменить его (например, someFoo.someList.clear()).

Вы должны сделать что-точто вы не хотите быть частью вашего частного API.

0 голосов
/ 27 июня 2019

Есть несколько вариантов использования.Он может использоваться для приведения переменных вниз.

Например, используя RxDart, мы можем получить:

final BehaviorSubject<Foo> _foo;
Stream<Foo> get foo => foo;

Это скрывает детали реализации.

Это также может бытьраньше делал дополнительные вещи внутри геттера.Например, Mobx использует это, чтобы знать, какие значения используются.

Но просто выставлять переменную без изменений или дополнительных вычислений бессмысленно.

...