Dart演算子

Dartは下表に記載されたすべての演算子に対応しており、表は優先度が高い順から低い順に並べられています

分類演算子結合性
単項後置演算子expr++ expr-- () [] ?[] . ?. !なし
単項前置演算子- expr ! expr ~ expr ++ expr -- expr await exprなし
乗除演算* / % ~/左結合
加減演算+ -左結合
シフト演算<< >> >>>左結合
ビットAND&左結合
ビットXOR^左結合
ビットOR|左結合
比較・型判定>= > <= < as is is!なし
等値判定== !=なし
論理AND&&左結合
論理OR||左結合
null合体演算子??左結合
三項条件演算子expr1 ? expr2 : expr3右結合
カスケード演算子.. ?..左結合
代入演算子= *= /= += -= &= ^= など右結合
展開演算子(備考参照)... ...?なし

上記の演算子と被演算子を組み合わせることで演算式を作成できます

例:

a++
a + b
a = b
a == b
c ? a : b
a is T

以下に正式な実行コード例を示します

void main() {
  // 1. 後置インクリメント a++
  int a = 10;
  print("1. 後置インクリメント a++");
  print("インクリメント前 a = $a");
  int temp = a++; // 値を取得した後にインクリメント
  print("temp(取得した値)= $temp");
  print("インクリメント後 a = $a\n");

  // 2. 加算式 a + b
  int b = 20;
  int sum = a + b;
  print("2. 加算 a + b");
  print("$a + $b = $sum\n");

  // 3. 代入式 a = b
  a = b;
  print("3. 代入 a = b");
  print("代入後 a = $a\n");

  // 4. 等値判定式 a == b
  bool isEqual = a == b;
  print("4. 等値判定 a == b");
  print("a == b の結果:$isEqual\n");

  // 5. 三項条件式 c ? a : b
  int c = 5;
  String result = c > 0 ? "cは正数" : "cは負数または0";
  print("5. 三項演算子 c ? a : b");
  print("c>0 判定結果:$result\n");

  // 6. 型判定式 a is T
  dynamic testVal = 100;
  print("6. 型判定 a is T");
  print("testVal is int:${testVal is int}");
  print("testVal is String:${testVal is String}");
}
Code language: Dart (dart)

上記コードをコピーし、dart run で実行してみてください

演算子優先度の核心ルール

1. 優先度の並び順

演算子表は上から下へ優先度が低くなる:上部の行に記載された演算子ほど優先度が高く、先に計算されます。

例:記号「>」は「優先度が高い」という意味で、大小比較ではありません。

実行順序:剰余 % > 等値判定 == > 論理AND &&

n % i == 0 && d % i == 0 の計算分解:

  1. まず n % id % i を計算(% の優先度が最も高い)
  2. 次に二つの == による等値比較を実行
  3. 最後に真ん中の && 論理ANDを計算
2 括弧の役割

括弧 ((n % i == 0) && (d % i == 0))コード可読性を向上させるだけで、元の計算順序は変わりません;

括弧なしバージョン n % i == 0 && d % i == 0:標準の優先度に従って自動計算され、二つのコードのロジック・実行結果は完全に同一;

補足:標準の優先度を無視したい場合のみ、括弧が計算順序を変更します。

void main() {
  int n = 10;
  int d = 20;
  int i = 2;

  // 書き方1:括弧付き、可読性高い
  if ((n % i == 0) && (d % i == 0)) {
    print("書き方1:割り切れる");
  }

  // 書き方2:括弧なし、優先度に従って計算、結果完全一致
  if (n % i == 0 && d % i == 0) {
    print("書き方2:割り切れる");
  }
}

実行結果

書き方1:割り切れる
書き方2:割り切れる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です