📜  Dart – 空感知运算符

📅  最后修改于: 2022-05-13 01:55:32.367000             🧑  作者: Mango

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});
}

输出: