本文へスキップ

アプリ開発日誌

Flutter開発のためのDart入門(3)演算子

Flutter開発のためのDart入門(3)演算子

演算子

前回のDart入門(2)の投稿に続き、今回もDartについて解説していきます。

今回は演算子について解説します。

Dartがサポートする演算子はこちらになります。

    • 単項後置  expr++ expr-- ( ) [ ] . ?.
    • 単項前置 -expr !expr ~expr ++expr --expr await expr
    • 乗除 * / % ~/
    • 加減 + -
    • シフト <> >>>
    • ビット AND&
    • ビット XOR^
    • ビットOR |
    • 比較と型チェック >= > <= < as is is!
    • 等価 == =!
    • 論理AND &&
    • 論理OR ||
    • nullチェック ??
    • 条件式 expr1 ? expr2 : expr3
    • カスケード ..
  • 代入 = *= /= += -= &= ^= etc..

算術演算子

Dartは、次に示すように、通常の算術演算子をサポートしています。

    • 足し算 +
    • 引き算 -
    • 符号反転 -expr
    • 掛け算 *
    • 割り算 /
    • 割り算(小数点以下切り捨て) ~/
  • 割り算の余り %

算術演算子は基本的な四則演算に使用されます。

void main() {
  var a = 1 + 2;
  print('1 + 2 = $a');

  var b = 4 - 3;
  print('4 - 3 = $b');

  var c = -b;
  print('-b == $c');

  var d = 3 * 4;
  print('3 * 4 = $d');

  var e = 5 / 2;
  print('5 / 2 = $e');

  var f = 5 ~/ 2;
  print('5 ~/ 2 = $f');

  var g = 5 % 2;
  print('5 % 2 = $g');
}

実行結果

1 + 2 = 3 
4 - 3 = 1 
-b == -1 
3 * 4 = 12 
5 / 2 = 2.5 
5 ~/ 2 = 2 
5 % 2 = 1

前置と後置のインクリメントとデクリメントの両方の演算子もサポートしています。

演算子の位置が、変数の前か後かで動作が異なります。

演算子    意味

    • ++var var = var + 1(右辺の値はvar + 1
    • var++ var = var + 1(右辺の値はvar
    • --var var = var - 1(右辺の値はvar - 1
  • var-- var = var - 1(右辺の値はvar
void main() {
  var a, b;
  
  a = 10;
  b = ++a; // aの値をインクリメントしてからbに代入
  print('a == b : ${a == b}'); // 11 == 11

  a = 10;
  b = a++; // aの値をbに代入してからaをインクリメント
  print('a != b : ${a != b}'); // 11 != 10

  a = 10;
  b = --a; // aの値をデクリメントしてからbに代入
  print('a == b : ${a == b}'); // 9 == 9

  a = 10;
  b = a--; // aの値をbに代入してからaをデクリメント
  print('a != b : ${a != b}'); // 9 != 10
}

実行結果

a == b : true
a != b : true
a == b : true
a != b : true

等号と関係演算子

二つの値を比較する際に使用します。

bool型のtrue、もしくはfalseが返ります。

    • == a == b(aとbの値が等しければtrue、異なればfalse)
    • != a != b(aとbの値が異なればtrue、等しければfalse)
    • > a > b(aの値がbの値より大きいならばtrue、以下ならばfalse)
    • < a < b(aの値がbの値より小さければtrue、以上ならばfalse)
    • >= a >= b(aの値がbの値以上であればtrue、小さければfalse)
  • <= a <= b(aの値がbの値以下であればtrue、大きければfalse)
void main() {
  var a = 10;
  var b = 20;
  var c = 10;

  print('a == c : ${a == c}'); // 10 == 10
  print('a != b : ${a != b}'); // 10 != 20
  print('b > c  : ${b > c}');  // 20 > 10
  print('a < b  : ${a < b}');  // 10 < 20
  print('a >= c : ${a >= c}'); // 10 > 10
  print('a <= c : ${a <= c}'); // 10 < 10
}

実行結果

a == c : true 
a != b : true 
b > c  : true 
a < b  : true 
a >= c : true 
a <= c : true

型テスト演算子

型変換や型チェックをするために、型テスト演算子が用意されています。

    • as 型変換(サブタイプの場合)
    • is 指定した型と一致するかチェック
  • is! 指定した型と異なっているかチェック

代入演算子

+=などの複合代入演算子は、演算と代入を組み合わせたものです。

    • = -= /= %= >>= ^=
  • += *= ~/= <<= &= |=
void main() {
  var a = 2;
  a *= 3; // a = a * 3
  print(a);
}

実行結果

6

論理演算子

論理演算子を使用して条件分岐の処理をおこないます。

    • !expr 式を反転させる
    • || 論理OR
  • && 論理AND

ビット演算子とシフト演算子

ビット演算をする際に使用されます。

    • & AND
    • | OR
    • ^ XOR
    • ~expr 補数
    • << 左シフト
  • >> 右シフト

三項演算子

三項演算子もサポートしています。

条件 ? expr1 : expr2

これは最初の?の前の条件がtrueの場合はexpr1を返し、falseの場合はexpr2が返ります。

void main() {
  var age = 20;
  var result = age >= 20 ? '成人' : '未成人';
  print(result);
}

実行結果

成人

カスケード記法

カスケード記法..を使用すると、関数呼び出しやフィールドにアクセスする際、一時的な変数を作成する手間が省けるので、よりシンプルなコードが記述できます。

カスケード記法を使わない書き方

void main() {
  List<String> list = ['a'];
  list.add('b');
  list.add('c');
  print(list);
}

実行結果

[a, b, c]

カスケード記法を使った書き方

void main() {
  List<String> list = ['a']..add('b')..add('c'); 
  print(list);
}

実行結果

[a, b, c]

次回は構文について投稿する予定です。

← ブログ一覧へ