Dartのアクセス修飾子
Dartにはアクセス修飾子がありません。その代わり、メンバの名前で可視性を与えることができます。メンバの名前が_
から始まるものは、いわゆるprivateな可視性となります。それ以外の名前は、いわゆるpublicな可視性となります。
例えば、以下のクラスのメンバ変数_name
はprivateなメンバ変数となり、同一ライブラリ内からのみアクセス可能です(ref. 1)。
// cat.dart
class Cat {
String _name;
Cat(String name) {
_name = name;
}
}
同一ライブラリ内からのみアクセス可能と言うのは、例えば以下のように同一ファイル内にクラスを定義した場合は、他クラスのprivateなメンバにアクセスすることができます。
// cat.dart
class Cat {
String _name;
String _keeper;
Cat(String name) {
_name = name;
Human human = Human();
_keeper = human._name;
}
}
class Human {
String _name = 'human';
}
可視性の範囲外からは、privateなメンバにはアクセスできません。
// main.dart
void main(List<String> arguments) {
Cat cat = Cat('tama');
//cat._name; // 不可
}
privateなメソッドも、メソッド名を_
から始めて定義します。
class Cat {
// 略
void _toilet() {
// do something here
}
}
setterは隠蔽し、getterだけを公開したい時は、以下のように別途getterを定義します。
class Cat {
String _name;
String get name => _name;
// 略
}
拡張メソッド(ref. 2)もprivateにすることが可能です。privateな拡張メソッドは、拡張メソッドを使いたい場所を限定したい時に使います。
extension CatExtension on Cat {
Dog _toDog() {
return Poodle(name: this.name);
}
}
Reference
About me 😎

茨城県つくば市在住のソフトウェアエンジニアです。専門領域はAndroidアプリ開発で、特にアーキテクチャに興味があります。某社でAndroidアプリ開発のテックリードをしています。
Jetpack ComposeによるAndroid MVVMアーキテクチャ入門の著者です。
👉 もっと詳しく
Writing 📝
Android MVVMアーキテクチャ入門
Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。
👉 もっと詳しく