Dart – 空感知运算符
dart的空感知运算符允许您根据值是否为空进行计算。它是较长表达式的简写。空感知运算符是一个很好的工具,可以让可空类型在Dart可用,而不是抛出错误。这些运算符在后卫组合中使用,您将在最后获得价值但不为空。几乎所有编程语言都使用 Null 感知运算符来检查给定的变量值是否为 Null。编程语言DartNull 的关键字为 null。 Null 意味着一个变量永远没有赋值,并且该变量没有类似的初始化。 Null 感知运算符最常见的用途是当开发人员想要从服务器解析 JSON 数据时,用户可以在解析 JSON 后使用 IF-Else 条件检查 JSON 是否为空。
这里解释了几个 Null-aware运算符。
1.默认操作员:??
- 我们用??如果另一个表达式解析为 null,您想要计算并返回一个表达式。
- 它也被称为 if-null运算符和合并运算符。
- 空感知运算符是?? , 返回其左侧的表达式,除非该表达式的值为 null。在这种情况下,它为 null 它返回其右侧的表达式:
示例 1:
Dart
void main(){
// In this we have defined the value of variable b.
var b = "GeeksforGeeks";
String a = b ?? 'Hello';
print(a);
// In this we have not defined the value of variable c.
var c;
String d = c ?? 'hello';
print(d);
}
Dart
void main() {
var code;
code = code ?? "Java";
print(code);
var companyName = "Microsoft";
companyName = companyName ?? "Google";
print(companyName);
}
Dart
void main(){
List lowerNumber = [1,2,3,4,5];
List upperNumbers = [6,8,9,0];
lowerNumber = [...lowerNumber,...?upperNumbers];
print('numbers are ${lowerNumber}');
List listNull;
lowerNumber = [...lowerNumber, ...?listNull];
print('new list are ${lowerNumber}');
}
Dart
void main(){
List friendA = [
Friend(name: 'Sara', age: 12),
Friend(name: 'Jenny', age: 17)
];
List friendB;
List myFriends = [...friendA, ...?friendB, Friend(name: 'Julia', age: 15)];
myFriends.forEach((friend) => print(friend.name));
}
class Friend{
String name;
int age;
Friend({this.name, this.age});
}
输出:
GeeksforGeeks
hello
说明:在上面的例子中,我们有两个部分。在第一部分变量 b 的值不为 null 。在变量 c的第二部分中,值为null 。在第一部分中,由于变量 b 不为 null , ??运算符将返回分配的值,即GeeksforGeeks , 在第二部分,变量 c 为 null ,因此第二个值将从 ??运算符,即你好。
示例 2:
Dart
void main() {
var code;
code = code ?? "Java";
print(code);
var companyName = "Microsoft";
companyName = companyName ?? "Google";
print(companyName);
}
输出:
Java
Microsoft
说明:在上面的例子中,我们声明了两个变量,其中一个为空值,另一个不为空并包含一个字符串值。我们正在使用 ??将值重新分配给这些变量时的运算符。在第一个变量中,由于变量代码为空,??运算符将返回第二个值,即Java,在第二种情况下,变量 companyName 不为空,因此第一个值将从 ??运算符,即微软。
2. 操作点差运算符:……?
- 这个运算符是在Dart 2.3 版中引入的。
- 将 … 放在表达式之前,仅当列表不为 null 时才将列表插入到另一个列表中。
- 它有助于向我们的集合添加多个值,例如 List、Map 和 Set。
- 它也称为空检查运算符。
示例 1:
Dart
void main(){
List lowerNumber = [1,2,3,4,5];
List upperNumbers = [6,8,9,0];
lowerNumber = [...lowerNumber,...?upperNumbers];
print('numbers are ${lowerNumber}');
List listNull;
lowerNumber = [...lowerNumber, ...?listNull];
print('new list are ${lowerNumber}');
}
输出:
解释:
- 在第一行输出中,我们得到了附加列表。
- 现在我们看到listNull的值没有被赋值,即它是 null。
- 在dart,如果我们不使用(..?)运算符,则会出现错误,因为listNull 的值为 null并且我们无法打印您可以在下面看到的所需输出 -
- 为了消除这个错误,我们使用了(...?)运算符,这样我们就不会出现错误并获得所需的输出。
- 所以在第二行,我们得到了一个新列表而不会导致错误。
示例 2:
Dart
void main(){
List friendA = [
Friend(name: 'Sara', age: 12),
Friend(name: 'Jenny', age: 17)
];
List friendB;
List myFriends = [...friendA, ...?friendB, Friend(name: 'Julia', age: 15)];
myFriends.forEach((friend) => print(friend.name));
}
class Friend{
String name;
int age;
Friend({this.name, this.age});
}
输出: