文法の基礎
-
Dartのメイン関数名はvoid main(){}です。パラメータmain(リスト引数)を追加することもできます
-
Dartの変数、関数、ゲッター、セッターは、クラスとは独立して存在でき、メインメソッドが上部にあります。
-
Dartの修飾子はデフォルトでpublicであり、public、private、protectedなどの修飾子はありません。
識別子の前にアンダースコア_を追加すると、プライベートにすることができます。次のように、変数にゲッターメソッドを追加して、それを読み取り可能にすることができます。パブリックメンバー変数の場合、デフォルトで暗黙のセッターとゲッターがあります。ゲッターメソッド定義:直接識別子内文字の前にgetを追加し、呼び出し時に定義された識別子を直接使用します。
int _speed = 0;
//通过修改其名称并添加一个getter,使private变量可读
int get speed => _speed;
调用时: A.speed
- Dartのコンストラクターには、次のように関数本体を含めることができません。
Bicycle(this.cadence, this.speed, this.gear);
其中this.cadence是简写,可以直接把参数赋值给成员变量,可选参数用{ }括起来,可以赋初始值,如下所示:
Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence;
this.speed = speed;
this.gear = gear;
}
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
- オブジェクトの作成
Dart 2以降は、新しいキーワードを省略できます。変数を定義すると、型の推論により型を記述できません
var bike = new Bicycle(2, 0, 1);
可简化为:
var bike = Bicycle(2, 0, 1);
- 変数の値が変化しないことがわかっている場合は、varの代わりにfinalを使用できます。
- Dartでは、一重引用符または二重引用符を使用して文字列Stringを宣言できます
- $ {expression}または$ Kotlinのような$変数名の形式で値を参照できます
- 使用する単一の関数式=>矢印
- Dartには、一般的に使用されるいくつかの例外クラスが組み込まれています。また、次のように、クラスをカスタマイズしてExceptionクラスから継承したり、例外情報の文字列を直接スローしたりすることもできます。
Shape shapeFactory(String type) {
if (type == 'circle') return Circle(2);
if (type == 'square') return Square(2);
throw 'Can\'t create $type.';
}
- ダートの工場パターン
ファクトリパターンには、オブジェクトの直接インスタンス化に比べていくつかの利点があります。インスタンス化の詳細を非表示にしたり、対応する基本クラスを返すサブクラスオブジェクトを提供したり、新しいオブジェクトを作成する代わりに既存のオブジェクトを使用したりできます。
Dartはキーワードファクトリーを使用してファクトリーコンストラクターを作成し、ファクトリークラスの定義を簡素化します。
abstract class Shape {
factory Shape(String type) {
if (type == 'circle') return Circle(2);
if (type == 'square') return Square(2);
throw 'Can\'t create $type.';
}
num get area;
}
- Dartにはインターフェイスキーワードはありません。すべてのクラスがインターフェイスを定義するため(すべてのクラスがインターフェイスを定義するため)、クラスを継承するにはimplementsキーワードを使用します
- Dartは関数型プログラミングをサポートしており、コレクションなどの一般的な操作は次のとおりです。
String scream(int length) => "A${'a' * length}h!";
main() {
final values = [1, 2, 3, 5, 10, 50];
//非函数式写法
for (var length in values) {
print(scream(length));
}
}
//函数式写法
values.skip(1).take(3).map(scream).forEach(print);