定数式で使える演算子一覧
.dart
数値演算子://+は文字結合も含むが、その他の型は不可能;Listも不可能
+,-, *,/,~/,%,-x
論理演算子:
!,&&,||
比較演算子:
<,<=,>,>=,==,!=
ビット演算子:
|,^,&,~x,<<,>>,>>>
型://定数式(定数コンストラクタも)は、Type promotionを起こす
as,is,is!
三項演算子://ここと、ここより上は定数コンストラクタでも使用可能;
BooL?a:b
配列・マップアクセス://ここ以下は定数コンストラクタでは使用不可。恐らくコレクション系の操作だから。
a[b]
コレクションif:
const Map m={if (i is int) i: 'int'}// ;
スプレット演算子:
...,?...// ;
関数呼び出しや、ゲッター・セッターの呼び出しは定数式で行えない。
定数式について
定数式で使える演算子と定数だけを含む式を定数式と言い、定数式はコンパイル時に計算され、その式の位置に計算結果が置かれる。
なので、定数式の内容は実行時のパフォーマンスに影響しない。
私は、パターンが同じ定数式があるなら定数コンストラクタを利用する。
定数式を直接書き込むよりはほんの少し負担が上がるが、記述を関数呼び出しの様に短くでき、実行時に計算するどの方法よりも軽いからです。
それらの例はこちら>>
https://qiita.com/drafts/c4144b5d2f18898e6ac8/edit
コンパイル時定数
コンパイル時に生成され、計算できる定数。
同じ値のコンパイル時定数は同じインスタンスになる。
何か補足したいことが出たら、適宜補足します。