🍣
【Dart】自作クラス同士を「+」で足し算
【Dart】Operatorを作成したクラスに利用
はじめに
- Operator(演算子)とは
-
Language tour | Dart > Operators
-
+
、-
、*
、/
や>=
、==
など
-
-
Language tour | Dart > Operators
簡単な足し算
- 単純な足し算を可能とする
-
[クラス名] 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