简介
匹配和解构
// 匹配
const a = 'a';
const b = 'b';
switch (obj) {
// List pattern [a, b] matches obj first if obj is a list with two fields,
// then if its fields match the constant subpatterns 'a' and 'b'.
case [a, b]:
print('$a, $b');
}
// 解构
var numList = [1, 2, 3];
// List pattern [a, b, c] destructures the three elements from numList...
var [a, b, c] = numList;
// ...and assigns them to new variables.
print(a + b + c);
变量赋值
使用变量赋值模式交换两个变量的值,而不声明第三个临时变量:
var (a, b) = ('left', 'right');
(b, a) = (a, b); // Swap.
print('$a $b'); // Prints "right left".
Switch
switch (obj) {
// Matches if 1 == obj.
case 1:
print('one');
// Matches if the value of obj is between the
// constant values of 'first' and 'last'.
case >= first && <= last:
print('in range');
// Matches if obj is a record with two fields,
// then assigns the fields to 'a' and 'b'.
case (var a, var b):
print('a = $a, b = $b');
default:
}
// 逻辑或在switch比较常见
var isPrimary = switch (color) {
Color.red || Color.yellow || Color.blue => true,
_ => false
};
// Switch 中的条件
switch (pair) {
case (int a, int b):
if (a > b) print('First element greater');
// If false, prints nothing and exits the switch.
case (int a, int b) when a > b:
// If false, prints nothing but proceeds to next case.
print('First element greater');
case (int a, int b):
print('First element not greater');
}
For and for-in loops
Map<String, int> hist = {
'a': 23,
'b': 100,
};
for (var MapEntry(key: key, value: count) in hist.entries) {
print('$key occurred $count times');
}
key: key 可简写为 :key
for (var MapEntry(:key, value: count) in hist.entries) {
print('$key occurred $count times');
}
在 Dart 中,MapEntry是Map中的一个内部类,它表示Map中的一个键值对
Map<String, int> myMap = {
'a': 1,
'b': 2,
'c': 3,
};
// 获取 Map 中的第一个键值对
MapEntry<String, int> firstEntry = myMap.entries.first;
// 访问键和值
String key = firstEntry.key;
int value = firstEntry.value;
// 修改值
firstEntry.value = 4;
// 打印修改后的 Map
print(myMap);
Algebraic data types(没懂
sealed class Shape {}
class Square implements Shape {
final double length;
Square(this.length);
}
class Circle implements Shape {
final double radius;
Circle(this.radius);
}
double calculateArea(Shape shape) => switch (shape) {
Square(length: var l) => l * l,
Circle(radius: var r) => math.pi * r * r
};
Validating incoming JSON
当知道JSON结构时
var json = {
'user': ['Lily', 13]
};
var {'user': [name, age]} = json;
当JSON来自外部(如网络),需要先进行验证
// 普通写法
if (json is Map<String, Object?> &&
json.length == 1 &&
json.containsKey('user')) {
var user = json['user'];
if (user is List<Object> &&
user.length == 2 &&
user[0] is String &&
user[1] is int) {
var name = user[0] as String;
var age = user[1] as int;
print('User $name is $age years old.');
}
}
// pattern写法
if (json case {'user': [String name, int age]}) {
print('User $name is $age years old.');
}
Pattern types 模式匹配类型
标签:case,学习,int,Dart,003,print,user,key,var
From: https://www.cnblogs.com/ayubene/p/18220058