本題
これはコンパイル時に計算されるので、負担が「.index」の場合と同じ
const.dart
class ENUMA_i{
const ENUMA_i(dynamic i):v=
i==c0?0:
i==c1?1:
i==c2?2:
-1;
/*
const ENUMA_i(dynamic i):v=//順序を入れ替えたもの。enumよりは若干大変だが、この様に簡単に入れ替えれる。
i==c1?0:
i==c0?1:
i==c2?2:
-1;
*/
final v;
static const c0=0,c1=1,c2=2;
//static const c0="0",c1="あ",c2=[true];//これでも可能だし、パフォーマンスに影響しない
}
負担の比較
const.dart
void main() {
DateTime startTime = DateTime.now();
for(var i=0;i<100000;++i){enumn.apple.index;}
print(DateTime.now().difference(startTime));
}
enum enumn{
apple,lemon;
}
0:00:00.000328
0:00:00.000332
0:00:00.000335
0:00:00.000341
- enumn.apple.index;
- enum enumn{
- apple,lemon;
- }
+ fluits.apple;
+ class fluits extends ENUM{
+ static const apple=0;//fluits.apple
+ static const lemon=1;
+ }
0:00:00.000258
0:00:00.000266
0:00:00.000261
0:00:00.000262
- enumn.apple.index;
+ fluits.apple;
+ class fluits extends ENUM{
+ static const apple=0;//fluits.apple
+ static const lemon=1;
+ }
0:00:00.000267
0:00:00.000267
0:00:00.000273
0:00:00.000274
- enumn.apple.index;
+ i;
+ const i=0;
この結果より、classのstatic constフィールドの呼び出しとconst変数の呼び出しの負担が等しいことが分かった
0:00:00.000272
0:00:00.000265
0:00:00.000266
0:00:00.000262
- enumn.apple.index;
- enum enumn{
- apple,lemon;
- }
+ ENUMA_i(1);
0:00:00.000338
0:00:00.000342
0:00:00.000325
0:00:00.000342
ところで、列挙されたものでconst値のintが返ってくるものを実装する方法ってありますか?私はずっとこの書き方をしていますが、少し不便だと感じています。>>
const.dart
class fluits{
static const apple=0;//fluits.apple
static const lemon=1;
}