スタッフブログ

STAFF BLOG

アプリ開発日誌

2021.07.21

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

Dart_programming_language_logo

演算子

前回の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]

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

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 木下 晴晶
    Mail:[email protected]

    3.取得した個人情報の利用目的的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。