どこかでoperator overloadは必要最低限に留めたほうがいいと書いてあるのを見たことがあります。
(C++の話をしているブログだったと記憶しています)
自分の中のイメージでもDart界隈にはあまりoperator overrideを使ってる人はいない印象があります。
実際有名Dartプロジェクトではどの程度使われているのか簡単に調べてみました。
#調査方法
Githubから有名なDartプロジェクトをcloneしてきてoverrideを使っている箇所をカウントする
#結果
##redstone.dart
演算子 | 回数 |
---|---|
[ ] | 1 |
[ ]= | 1 |
== | 2 |
ちなみに[ ]の使い方ですが大文字でも小文字でもデータを取り出せるよう、こんなコードでした。
List<String> operator [](String name) => _headers[name.toLowerCase()];
##dart-samples
演算子 | 回数 |
---|---|
/ | 1 |
* | 1 |
+ | 1 |
- | 1 |
-expr | 1 |
[ ] | 1 |
[ ]= | 1 |
ベクトル同士の計算を一通り用意していました。 |
##angular.dart
演算子 | 回数 |
---|---|
[ ] | 18 |
[ ]= | 10 |
== | 6 |
[ ]演算子のoverrideを多用していました。 |
##three.dart
演算子 | 回数 |
---|---|
[ ]= | 3 |
[ ] | 4 |
== | 1 |
3Dのライブラリということでもっとたくさん出てきそうだったのですが、 | |
ほとんど使っていませんでした。 |
#感想
[ ]のoverrideは積極的に使っていこうと思います。
それ以外の演算子のoverrideはあまり使わないのが普通なのかなと思いました。
そもそもDartが標準のベクトル型を用意すればこの機能自体をなくせるのではとも思いました。