😽
【Dart】GetterとSetterの基礎
【Dart】GetterとSetter
-
背景
- クラス変数をプライベートにした際、安全に参照・変更したいため
- ※プライベート変数は
[インスタンス名].[変数名]
のように直接扱えない
- ※プライベート変数は
- クラス変数をプライベートにした際、安全に参照・変更したいため
-
【参考】公式のLanguage tourサイト
Getterのみ(リードオンリー)
- Getterを利用し、Monsterクラスのプライベート変数を参照のみ可能とする
class Monster {
int _number;
String _name;
Monster(this._number, this._name);
// Getter
int get number => _number;
String get name => _name;
}
void main() {
final monster = Monster(1, 'Slime');
print(monster.number.toString() + ':' + monster.name);
}
実行結果
1:Slime
- 【備考】プライベート変数へのアクセス
- 同じファイルに記載するとプライベート変数として機能しないが、ファイルを分けて
import 'monster.dart';
のように利用した際には以下のエラーとなる-
monster._number = 0;
のエラーメッセージThe setter '_number' isn't defined for the type 'Monster'.
-
monster._number.toString()
のエラーメッセージThe getter '_number' isn't defined for the type 'Monster'.
-
- 同じファイルに記載するとプライベート変数として機能しないが、ファイルを分けて
Setter追加
- Setterを利用し、Monsterクラスのプライベート変数
_name
を変更可能とする- この際、値のチェックが可能
class Monster {
int _number;
String _name;
Monster(this._number, this._name);
// Getter
int get number => _number;
String get name => _name;
// Setter
set name(String s) {
if (s.length > 0 && s.length < 11) {
_name = s;
} else {
print('$s:文字数を1文字以上10文字以下にしてください。');
}
}
}
void main() {
final monster = Monster(1, 'Slime');
print(monster.number.toString() + ':' + monster.name);
monster.name = 'Slaline';
print(monster.number.toString() + ':' + monster.name);
}
実行結果
1:Slime
1:Slaline
Discussion