Open10

Dartキャッチアップ

蔀

classとenumがある
classはイニシャライザではなくコンストラクタ

class Spacecraft {
  String name;
  DateTime? launchDate;

  // Constructor, with syntactic sugar for assignment to members.
  Spacecraft(this.name, this.launchDate) {
    // Initialization code goes here.
  }
}
蔀

継承について

  • Dartは単一継承のみをサポート
  • 継承の柔軟性として、mixinとabstract classが提供されている
    • mixinは多重継承が可能。共通機能向けに使う用途
    • abstract classはクラスのプロトタイプを記述する用途
蔀

全体的にJavaScriptの欠点を克服するという意図で開発されたため、JSに性質が近い

  • すべての型(null以外)はObjectを継承している
  • すべてがオブジェクト、すべてがクラスのインスタンス(enumは制約付きクラスみたいな扱い)
蔀

ワイルドカード変数

Swiftの_と用途は同じ。使わないことを示す。
ワイルドカード変数って呼ぶの一般的なのかな?

// レコードの分解で特定のフィールドだけ欲しい場合
var record = (name: 'Name', age: 30, city: 'Tokyo');
var (name: _, age: age, city: _) = record;
print(age); // 30
蔀

カスケード記法

var paint = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;

# これと同じ
var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;
蔀

モダンJSっぽいスプレッド構文が使える。計算の優先度が最低であるため、下記のような書き方がコンパイル可能

  var a = [1, 2];
  var b = [3, 4];
  var result = [...a + b];  // a + b が先に評価される
  print(result); // [1, 2, 3, 4]
蔀

async* でStreamをawaitできるようになるらしい

蔀

sealed classを使うとMECEなクラスが作成できる
default文を書く必要がなくなる
enumと似てるけど、動的に選択肢が増えるようなケースで使う
まだちょっとユースケースが腑に落ちてないかも

蔀

https://dart.dev/language/functions#named-parameters

名前付き引数
「名前付き」というのは、メソッドを使う側から見て名前つけるのが強制されるから
パラメーター複数あるときはこれ使うのが基本的には良さそう
1つのときは引数の指定がわかりきってるときは使わない、とかかな