Dart構文(二):オペレータおよび構造関数

6604 ワード

タイプテストオペレータ
オペレータ
説明
as
Typecase(タイプ変換)
is
オブジェクトがこのタイプの場合はtrueを返します.
is!
オブジェクトがこのタイプの場合falseを返します.
  • isの使用は、personがnullまたはPersonでない場合、判断の文
    if (person is Person) {               // Type check
              person.firstName = 'Bob';
            }
  • は実行されません.
  • asの使用は、personがnullまたはPersonでない場合、異常
    (person as Person).firstName = 'Bob';
  • が放出される.
    Assert
  • assert文は検出モードのみで有効であり、生産モードでは何の効果もない
  • assert文を使用して実行条件を検出します.条件がfalseであると、実行が中断する異常(AssertionError)
  • が放出される.
    Class
  • オブジェクト上で複数の操作を実行するには、カスケードオペレータ(..)
    querySelector('#button')
    ..text = 'Click to Confirm'                        // Get an object. Use its
    ..classes.add('important')                         // instance variables
    ..onClick.listen((e) => window.alert('Confirmed!')); // and methods.
  • を使用することができる.
    インスタンス変数
  • インスタンス変数を定義するときに、コンストラクション関数または他の関数ではなく値を設定すると、コンストラクション関数および初期化リストが実行される前に、コンストラクション関数および初期化リストが実行される
  • が発生する.
    コンストラクタ
  • 構造関数パラメータ付与
    class Point {
      num x;
      num y;
    
      Point(num x, num y) {
        //  , !
        this.x = x;
        this.y = y;
      }
    }
    は、
    class Point {
      num x;
      num y;
    
      //  
      Point(this.x, this.y);
    }
  • と略記することができる.
  • コンストラクタは、
  • の継承をサポートしません.
  • ネーミングコンストラクタ
  • 名前付きコンストラクタで複数のコンストラクタを提供するか、より明確な情報を提供する
    class Point {
      num x;
      num y;
    
      Point(this.x, this.y);
    
      //  
      Point.fromJson(Map json) {
        x = json['x'];
        y = json['y'];
      }
    }
  • .
  • 親にパラメータのないデフォルトのコンストラクション関数がない場合は、子クラスが親コンストラクション関数を手動で呼び出す必要があります.:の後のコンストラクタボディの前に呼び出す親コンストラクタ
    class Person {
      Person.fromJson(Map data) {
        print('in Person');
      }
    }
    
    class Employee extends Person {
      // Person  
      //   super.fromJson(data)  
      Employee.fromJson(Map data) : super.fromJson(data) {
        print('in Employee');
      }
    }
    
    main() {
      var emp = new Employee.fromJson({});
    
      //  :
      // in Person
      // in Employee
    }
  • を指定します.
  • リダイレクトコンストラクション関数いくつかのコンストラクション関数は、同じクラスの別のコンストラクション関数
    class Point {
      num x;
      num y;
    
      Point(this.x, this.y);                //  
      Point.alongXAxis(num x) : this(x, 0); //  
    }
  • を呼び出すだけである.
  • 定数コンストラクション関数クラスが変更されていないオブジェクトを生成する場合、これらのオブジェクトをコンパイラ定数として定義できます.constのコンストラクタを使用してインスタンス変数に値を割り当てる、finalにインスタンス変数を設定して、
    class ImmutablePoint {
      final num x;
      final num y;
      const ImmutablePoint(this.x, this.y);
      static final ImmutablePoint origin = const ImmutablePoint(0, 0);
    }
  • を実装する.
  • ファクトリコンストラクション関数1つのコンストラクション関数が常に新しいオブジェクトを作成する必要がない場合(またはキャッシュからインスタンスを返す)、factoryキーワードでコンストラクション関数
    class Logger {
      final String name;
      bool mute = false;
    
      // _cache is library-private, thanks to the _ in front of its name.
      static final Map _cache = {};
    
      factory Logger(String name) {
        if (_cache.containsKey(name)) {
          return _cache[name];
        } else {
          final logger = new Logger._internal(name);
          _cache[name] = logger;
          return logger;
        }
      }
    
      Logger._internal(this.name);
    
      void log(String msg) {
        if (!mute) {
          print(msg);
        }
      }
    }
  • を修飾することができる.