🍣

【Dart】自作クラス同士を「+」で足し算

2020/12/13に公開

【Dart】Operatorを作成したクラスに利用

はじめに

簡単な足し算

  • 単純な足し算を可能とする
    • [クラス名] operator +([クラス名] [変数名]) => [クラス名]([引数]));で「+」Operatorを利用可能とする
      • 上記の[変数名]は利用した際に「+」の後にくるものなので、other等
    • Test operator +(Test other) => Test(number + other.number);の記載が無いと以下エラーとなる
      • The operator '+' isn't defined for the type
class Test {
  int number;
  Test(this.number);

  Test operator +(Test other) => Test(number + other.number);
}

void main() {
  final test1 = Test(1);
  final test2 = Test(2);

  final sum = test1 + test2;
  print(sum.number);
}

実行結果

3
  • 上記の足し算の際の処理を複数行とする
class Test {
  int number;
  Test(this.number);

  Test operator +(Test other) {
    print('+:TEST');
    return Test(number + other.number);
  }
}

void main() {
  final test1 = Test(1);
  final test2 = Test(2);

  final sum = test1 + test2;
  print(sum.number);
}

実行結果

+:TEST
3
  • Stringの場合も同様
class Test {
  String sentence;
  Test(this.sentence);

  Test operator +(Test other) => Test(sentence + other.sentence);
}

void main() {
  final test1 = Test('A');
  final test2 = Test('B');

  final sum = test1 + test2;
  print(sum.sentence);
}

実行結果

AB

少し応用した足し算

  • 足し算を行う際に特別な追加計算や、閾値設定を可能とする
    • モンスターの名前とHPを融合させる
class Monster {
  String name;
  int hp;
  Monster(this.name, this.hp);

  Monster operator +(Monster other) => Monster(
      name + '&' + other.name, (hp + other.hp) > 100 ? 100 : hp + other.hp);
}

void main() {
  final test1 = Monster('Slime', 5);
  final test2 = Monster('Dragon', 100);

  final sum = test1 + test2;
  print(sum.name);
  print(sum.hp);
}

実行結果

Slime&Dragon
100

備考

  • 今回は、パッと思いつく例として、足し算の例を記載
    • ※実際には、クラスの特性に合わせて必要なOperatorを追加

Discussion