添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

注意: Dart2 ではビット AND 、ビット XOR 、及びビット OR 演算子が 関係及び型テストの上に優先度が上がっており、以前の版のコードを 2.x 版に対応させる際は注意を要する。

この表は優先順序の高いほうから示されている。例えば、乗除算の % は等価演算子の == より高く、 == は論理 AND 演算子の && より高い。 この優先度は、以下の 2 行は同じやり方で処理が進む:

警告:ふたつの被演算数上で機能する演算子たちにおいて、一番左側の被演算数がその演算 のどのバージョンが使われるかを決める。例えば、もし Vector オブジェクトと Point オブジェクトを使っていると、 aVector + aPoint という式は + Vector バージョンを使う。

代数演算子 (arithmetic operators)

Dart は下表に示すように通常の代数演算子をサポートしている。

assert ( 2 * 3 == 6 ); assert ( 5 / 2 == 2.5 ); // 結果は double assert ( 5 ~/ 2 == 2 ); // 結果は int assert ( 5 % 2 == 1 ); // 剰余 assert ( '5/2 = ${ 5 ~/ 2 } r ${ 5 % 2 } ' == '5/2 = 2 r 1' );

2 つのオブジェクト x y が同じことなのかどうかをテストするには == 演算子を使用する。( 2 つのオブジェクトがまさしく同じオブジェクトなのか知りたいという稀なケースでは、これの代わりに identical() 関数を使用する。)以下は == 演算子がどのように機能するかを示している:

  • もし x または y null なら、の市双方とも null なら true を返し、ただ一つが null なら false を返す。

  • メソッド呼び出し x.==(y) の結果を返す。(その通り、 Overridable operators で解説するように、 == と云うような演算子はその最初の被演算数上で呼び出されるメソッドである。 == を含む多くの演算子をオーバライドすることも可能である。)

    以下は各対等性と関係演算子の使用例である:

    注意:このコードは対等ではない。もし emp null または Person で無いなら、最初のサンプル( is を使った)では何もしない; 2 番目のコード( as を使った)では例外がスローされる。

    代入演算子 (Assignment operators)

    既にこれまで示されていたように = 演算子を使って値を代入できる。代入先の変数が null の時に限り、 ??= 演算子を使う。

    final bitmask = 0x0f ; assert ((value & bitmask) == 0x02 ); // AND assert ((value & ~bitmask) == 0x20 ); // AND NOT assert ((value | bitmask) == 0x2f ); // OR assert ((value ^ bitmask) == 0x2d ); // XOR assert ((value << 4 ) == 0x220 ); // Shift left assert ((value >> 4 ) == 0x02 ); // Shift right

    condition ? expr1 : expr2

    condition true なら expr1 を計算する(そしてその値を返す);そうでなければ、 expr2 を計算して返す。

    expr1 ?? expr2

    もし expr1 が非 null のときはその値を返す; そうでなければ、 expr2 を計算して返す。

    ブール式に基づいて値を代入したいときは ? : の使用を検討されたい。

    // ?:演算子を使った少し長い記述
    String playerName(String name) => name != null ? name : 'Guest';
    // if-else文を使った非常に長い記述
    String playerName(String name) {
      if (name != null) {
        return name;
      } else {
        return 'Guest';
    notation)
    

    カスケード (..)SmallTalkで最初に導入されたもので、同じオブジェクト上で操作のシーケンスを行得るようになる。関数呼び出しに加えて、同じオブジェクト上のフィールドにもアクセスできる。これにより一時変数生成のステップが節約され、より簡潔なコードが書ける。

    以下のコードを考えてみよう:

    querySelector('#confirm') // object取得
      ..text = 'Confirm' // そのメンバを使用
      ..classes.add('important')
      ..onClick.listen((e) => window.alert('Confirmed!'));

    最初のメソッド呼び出しquerySelector()selectorオブジェクトを返す。これに続くカスケード表記はこのselectorオブジェクト上で動作し、それが返されるかもしれないどの後の値も無視する。

    前のサンプルは以下と等価である:

    var button = querySelector('#confirm');
    button.text = 'Confirm';
    button.classes.add('important');
    button.onClick.listen((e) => window.alert('Confirmed!'));
    List keys = mimeMap.keys.toList()..sort(); for (String key in keys) { print('extension: $key, mime type:${mimeMap[key]}'); extension: 3g2, mime type:video/3gpp2 extension: abs, mime type:audio/x-mpeg extension: exe, mime type:application/octet-stream extension: rtf, mime type:application/rtf
  •