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と似てるけど、動的に選択肢が増えるようなケースで使う
まだちょっとユースケースが腑に落ちてないかも

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