0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Dartで、enumの負担と他型のインスタンスを使用する列挙型。

Posted at

本題

これはコンパイル時に計算されるので、負担が「.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;
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?