序文
Dart 言語にはシュガー構文やラムダ式がたくさんあります。構文やコード サイズははるかに単純ですが、これから始めたいと思っている人にとっては非常に面倒です。公式 API や 3 番目の API をよく見ると、 party ドキュメント API (例では) 類似した文法的なシュガーが多数使用されており、コードの可読性が大幅に低下しています。このコードの意味を理解するには、多くの記事を検索する必要があります。この記事は、作成された文法的なシュガーの概要です。自分で。
構文的なシュガーまたはラムダ式
1. メソッドとその太い矢印 (=>)
dart はすべてがオブジェクトになり得ることを真に認識しているため、 dart のメソッド(関数)もクラス (クラス)です。
dart は厳密に型指定された言語ですが、変数は var で宣言できます。dynamic の動的型を使用すると、変数の型は実行時に推測できます。メソッドも例外ではありません。メソッドを宣言するときに戻り値の型を省略できます (公式には推奨されていません)
次のように:
add(int x,int y){
return x+y;
}
main(){
print(add(2, 3));
}
実行後のコンソールは次のようになります。
5
このとき、add()メソッドの戻り値の型を見ると、dynamic、つまり動的データ型であることがわかります。
日常的な使用では、メソッドの前の戻り値の型を省略しないことをお勧めします。戻り値の型を明確に示すと、コードの可読性が大幅に向上します。
Dart では、メソッドにステートメントが 1 行しかない場合、上記の add() メソッドなど、メソッド本体の代わりに太い矢印 (=>)を使用できます。
次のように:
int add(int x,int y) => x + y ;
void main(){
print(add(2, 3));
}
2. call() メソッド
dart のクラスに"call"という名前のメソッドがある場合、() を使用して直接呼び出すことができます。
次のように:
class Computer{
Computer(){
print('01');
}
Computer.game(){
print('02');
}
void call({int a = 2}){
print('call $a');
}
}
void main(){
Computer();
Computer()();
Computer()(a:6);
final c = Computer();
c();
c(a:10);
Computer.game()();
Computer.game()(a:111);
}
コンソールには次のように出力されます。
01
01
call 2
01
call 6
01
call 2
call 10
02
call 2
02
call 111
3. null 可能性 (?) と null アサーション演算子 (!) を宣言します。
dart2.12 以降では、null 安全性がデフォルトで有効になっており、型を決定するときに通常宣言する変数を空にすることはできません。たとえば、以下の宣言は間違っており、コンパイラはコンパイル時にエラーを報告します。
int a = null;
空の変数を宣言する場合は、宣言の型の後に ? を追加して、型が空であってもよいことを示し、値が割り当てられていない場合はすべての変数のデフォルト値が null になるようにします。
int? a;
変数が空であると宣言されている場合、メソッド呼び出しまたは変数が空である可能性がある場合、コンパイル時エラーが報告されます。
現時点では、null アサーション演算子を使用して、呼び出すオブジェクトが空ではないことを示すことができます。
int? getNum() => 1;
void main(){
var c = getNum();
print(c!.abs());
}
または、(.) の前に (?) を追加して、NULL 可能であることを示します
int? getNum() => 1;
void main(){
var c = getNum();
print(c?.abs());
}
4. ?? および ??= エスケープ演算子
Null 許容変数を宣言する場合、回避演算子を使用して値を割り当て、変数が空にならないようにすることができます。
int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
使用する場合、?? を使用して変数が空になるのを防ぐことができます
print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.
5. カスケード演算子 (..)
Dart では、カスケード演算子を使用して、同じオブジェクトを連続して呼び出すことができます。
class Player{
int ammo = 3;
void walk() => print('walk');
void run() => print('run');
void fire(int a){
if(ammo >= a){
print('ta'*a);
ammo -= a;
}
}
}
Player? getPlayer() => Player();
void main(){
getPlayer()
?..walk()
..run()
..fire(3);
}
これは、オブジェクトが null でない場合に実行を保証するために (?..) を使用して null 判定と併用できます。
次のように実行します。
walk
run
tatata
6、ラムダ
forEach()
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.map(scream).forEach(print);
//跳过1
//拿3个结果
values.skip(1).take(3).map(scream).forEach(print);
}