在 dart 中将 final 变量设为私有是多余的吗?
Is it redundant to make final variables private in dart?
下面的class有多个参数,但只有一些需要是final;我的问题是,我是否也应该将这些最终变量设为私有,或者这样做是否多余?
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;
}
}
它有一些 use-cases。它可以用于down-cast个变量。
例如,使用 RxDart 我们可以:
final BehaviorSubject<Foo> _foo;
Stream<Foo> get foo => foo;
这隐藏了实现细节。
它也可以用来在 getter 中做额外的事情。例如,Mobx 使用它来了解使用了哪些值。
但是直接公开变量而不进行修改或额外计算是没有意义的。
创建私有成员final
并不是多余的。一般来说,私有和 final
是正交的。例如,考虑如下内容:
class Foo {
final List<int> someList;
}
仅仅因为 Foo.someList
是 final
并不能阻止外部代码修改它(例如 someFoo.someList.clear()
)。
您应该将不想成为您 API 一部分的内容设为私有。
下面的class有多个参数,但只有一些需要是final;我的问题是,我是否也应该将这些最终变量设为私有,或者这样做是否多余?
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;
}
}
它有一些 use-cases。它可以用于down-cast个变量。
例如,使用 RxDart 我们可以:
final BehaviorSubject<Foo> _foo;
Stream<Foo> get foo => foo;
这隐藏了实现细节。
它也可以用来在 getter 中做额外的事情。例如,Mobx 使用它来了解使用了哪些值。
但是直接公开变量而不进行修改或额外计算是没有意义的。
创建私有成员final
并不是多余的。一般来说,私有和 final
是正交的。例如,考虑如下内容:
class Foo {
final List<int> someList;
}
仅仅因为 Foo.someList
是 final
并不能阻止外部代码修改它(例如 someFoo.someList.clear()
)。
您应该将不想成为您 API 一部分的内容设为私有。