Dart 2ベース--オペレータ

2966 ワード

Dart 2ベース–オペレータ


オペレータ


説明
オペレータ
一元接尾辞オペレータ
expr++ expr-- () [] . ?.
一元接頭辞オペレータ
-expr !expr ~expr ++expr --expr 
乗算オペレータ
* / % ~/(除算、整数結果を返す) 
加算
+ - 
シフト
<> 
ビットオペレータ
& ^ | 
リレーションシップとタイプテスト
>= > <= 
同等性
== != 
論理と、または
&& || 
空かどうかを判断する
?? 
条件テスト
expr1 ? expr2 : expr3
カスケード
..
に値を付ける
= *= /= ~/= %= += -= <<= >>= &= |= ^= ??= 

タイプテストオペレータ


as、isとis! この3つのオペレータは、実行時にタイプを検出するのに非常に役立ちます.
オペレータ
釈義
as 
タイプ変換(ライブラリの接頭辞を指定することもできます)
is 
オブジェクトに指定したタイプがある場合はtrueを返します.
is! 
オブジェクトに指定したタイプがある場合はfalseを返します.
asオペレータを使用して、オブジェクトを指定したタイプに変換します.通常、is条件テストを簡単に書くことができます.例えば、
if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}

asオペレータを使用してコードを短縮できます.
(emp as Person).firstName = 'Bob';

割り当てオペレータ


=を使用して変数に値を割り当てます.値を割り当てる変数がnullの場合にのみ、変数に値を割り当てます.オペレータ.
// Assign value to a
a = value;
// Assign value to b if b is null; otherwise, b stays the same
b ??= value;

条件式

  • condition ? expr 1:expr 2 conditionがtureの場合、式expr 1の値を計算し、その結果を返します.そうでない場合、式expr 2の値を計算し、その結果を返します.
  • expr1 ?? expr 2式expr 1がnullでない場合は、その値を返します.そうでない場合は、式expr 2の値を計算し、その結果を返します.

  • カスケード記号(.)


    カスケード記号を使用すると、同じオブジェクトに対して一連の操作を行うことができます.関数呼び出しだけでなく、同じオブジェクトのフィールドにもアクセスできます.これにより、通常、一時的な変数を作成する手順を節約し、よりスムーズなコードを作成できます.次のコードを考慮します.
    querySelector('#confirm') // Get an object.
      ..text = 'Confirm' // Use its members.
      ..classes.add('important')
      ..onClick.listen((e) => window.alert('Confirmed!'));
    

    最初のメソッドquerySelector()の呼び出しは、セレクタオブジェクトを返します.カスケードシンボルの後ろのコードは、このセレクタオブジェクトに対して操作され、返される可能性のある後続の値は無視されます.上のコードは次のコードと同じです.
    var button = querySelector('#confirm');
    button.text = 'Confirm';
    button.classes.add('important');
    button.onClick.listen((e) => window.alert('Confirmed!'));
    

    カスケード操作をネストすることもできます.たとえば、次のようにします.
    final addressBook = (AddressBookBuilder()
          ..name = 'jenny'
          ..email = '[email protected]'
          ..phone = (PhoneNumberBuilder()
                ..number = '415-555-0100'
                ..label = 'home')
              .build())
        .build();
    

    次のコードが間違っているなど、実際のオブジェクトを返す関数にカスケードを作成するには注意してください.
    var sb = StringBuffer();
    sb.write('foo')
      ..write('bar'); // Error: method 'write' isn't defined for 'void'.
    

    なぜならsb.write()呼び出しはvoidを返し,void上でカスケード操作を構築することはできない.

    条件付きメンバーアクセス方法(?.)


    通過に類似するメンバーにアクセスしますが、一番左のオペレータはnullではありません.例:foo?barアクセスfooのbarプロパティfooがnullでない限り、fooがnullである場合、foo?barの値もnullです.