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..
|
2月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
11 0
N..
|
2月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
12 0
N..
|
2月前
|
存储 Dart
Dart语言的内置数据类型
Dart语言的内置数据类型
N..
9 0
|
7月前
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
130 0
|
Dart
Dart之枚举
Dart之枚举
77 0
Dart之枚举
|
Dart
Dart之 方法定义
Dart之 方法定义
82 0
Dart之 方法定义
|
Dart JavaScript 前端开发
dart系列之:dart语言中的变量
dart系列之:dart语言中的变量
dart系列之:dart类的扩展
dart系列之:dart类的扩展
|
Dart JavaScript 前端开发
dart系列之:dart语言中的函数
dart系列之:dart语言中的函数
|
存储 Dart 安全
dart系列之:dart类中的泛型
dart系列之:dart类中的泛型

热门文章

最新文章