dart 类型提升

简介: dart 类型提升

看下面的例子

Object text = 'IAM17';
 if (text is String) {
   print(text.length);
 }
复制代码

本来 text 是 Object 类型,是没有 length 属性的,但是在 if 语句里,text 被提升为  String 类型,所以可以有 length 属性。

再看下面的例子。

class Person {
  String? get name => "IAM17";
  getNameLength() {
    if (name is String) {
      return name.length;
    }
  }
}
复制代码

这样写会报错。因为属性是无法获得提升的。为什么属性无法获得提升?因为属性的返回值是可以变化的。比如可以写成下面这样。

String? get name => Random().nextBool() ? "IAM17" : null;
复制代码

这会导致在 if 判断的时候是 "IAM17" 但是到 return name.length 的时候就变成 null 了。

因为这个原因,所以属性是不能提升的。如果想获得属性提升的便利,可以把加一个临时变量。

class Person {
  String? get name => Random().nextBool() ? "IAM17" : null;
  getNameLength() {
    var tmpName = name;
    if (tmpName is String) {
      return tmpName.length;
    }
  }
}
复制代码

到这就结束了,在写代码的时候,可以充分利用 dart 类型提升的特性来提升效率。

参考

类型提升


目录
相关文章
N..
|
3月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
37 0
|
2月前
|
存储 Dart
Dart的Map类型
Dart的Map类型
26 0
|
2月前
|
Dart
Dart语言中的布尔类型详解及实例应用
Dart语言中的布尔类型详解及实例应用
25 0
|
2月前
|
Dart
Dart之类型转换
Dart之类型转换
11 0
N..
|
3月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
21 0
|
10月前
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
146 0
|
Dart
Dart之枚举
Dart之枚举
86 0
Dart之枚举
|
Dart
Dart之 方法定义
Dart之 方法定义
94 0
Dart之 方法定义
|
Dart
Dart之计算属性
Dart之计算属性
98 0
Dart之计算属性
|
Dart
Dart之dynamic(任意类型)
Dart之dynamic(任意类型)
81 0
Dart之dynamic(任意类型)