😽

【Dart】GetterとSetterの基礎

2020/12/09に公開

【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