Dart言語文法特性の概要(2)

4996 ワード

前回は主にdartと他の新しい言語が似ている特性を紹介しましたが、この号ではdartの中で独自の特性や、他の言語ではあまり見られない特性を紹介しました.
1.fluent apiのサポートを内蔵し、中国語で翻訳するとチェーン呼び出し、またはフロー呼び出しの現在の多くの言語のライブラリがfluent apiになるのが好きで、最も有名なのはjqueryライブラリで、実現も簡単で、方法で最後にthisに戻ることができます.しかし、これに戻ることができない場合もあります.ただしdart言語では内蔵のサポートが提供されています
void main() {
  querySelector('#sample_text_id')
    ..text = 'Click me!'
    ..onClick.listen(reverseText);
}

..オペレータは、メソッド呼び出しがオブジェクト上で発生することを保証します.
2.文字列内挿、この上期は言い忘れましたが、実は多くの言語にもある機能です.現在、プログラミング言語における文字列処理の機能はますます重要になっている.数十年前にコンピュータが科学計算分野に多く使われていたのに比べて、データ処理に使われると推定される文字処理のプログラムが多くなります.
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');

3.組み込まれたassertは多くの言語assertと類似の機能を1つのライブラリとしてサポートする方法とは異なり、dartのassertは言語特性として実現される.
4.ネーミングコンストラクタdartのコンストラクタはネーミングでき、呼び出しが便利である.しかし、今は工場モードの作成が一般的なので、鶏の肋骨のような感じがします.これとの意味もあまり違わないでしょう.
class Point {
  num x, y;

  Point(this.x, this.y);

  //      ,          ?
  Point.origin() {
    x = 0;
    y = 0;
  }
}

5.定数コンストラクタが単一のモデルを迅速に実現するモデルであり、言語レベルで設計モデルをサポートすることはますます一般的になっている.例えばkotlinのbyコンビネーションモード、object単例モード、withコンストラクタモード、company objectファクトリモード、rubyのmixinコンビネーションモード....
class ImmutablePoint {
  static final ImmutablePoint origin =
      const ImmutablePoint(0, 0);

  final num x, y;
    #const               
  const ImmutablePoint(this.x, this.y);
}

6.ファクトリコンストラクタこれは暗黙的なファクトリモード実装であり、キャッシュ機能を提供する(キャッシュは自分で実現する)
class Logger {
  final String name;
  bool mute = false;

  //       ,  new        factory  
  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);
  }
}

7.空のメソッド呼び出しは、動的エージェントを迅速に実装する方法であるべきです(静的言語がより動的になりたいということです).
class A {
  //       ,                ,          java          
  @override
  void noSuchMethod(Invocation mirror) {
    print('You tried to use a non-existent member: ' +
        '${mirror.memberName}');
  }
}

8.mixinはrubyのmixinと似ています.今では継承できるかどうかは継承しなくてもいい(実はmixinは変相の多継承である)
9.非同期特性現在、多くの新しい言語またはフレームワークは、netty、nodejsなどの非同期および同時の良好なサポートに火をつけている.言語にはgo、erlangがあります.これからネットワーク機器が増えるにつれて、ネットワークはますます発達していくと思います.非同期と同時プログラミングはますます重要になります.
//            async
//await           ,               。
Future checkVersion() async {
  var version = await lookUpVersion();
  // Do something with version
}

10.Metadata javaのような注釈
11.呼び出すことができるクラスは、クラスを方法のように呼び出すことができ、卵用はありません.kotlinにもあるのを覚えています.そしてjsという構造方法と普通の方法とは区別がつかないのが少し似ています.