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..
|
7月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
77 0
|
Dart
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
函数(Function)也被称为方法(Method)。其最直观的理解就是数据中的函数,比如y=f(x),在编程中,f对输入x进行处理,返回结果y,就是一个函数......
1062 0
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
|
6月前
|
存储 Dart
Dart的Map类型
Dart的Map类型
|
4月前
|
Dragonfly Dart NoSQL
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的
|
7月前
|
Dart JavaScript
Flutter - Dart 基础(数据类型)
【2月更文挑战第3天】
197 1
N..
|
7月前
|
存储 Dart
Dart语言的内置数据类型
Dart语言的内置数据类型
N..
39 0
N..
|
7月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
62 0
|
存储 Dart JavaScript
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
【Dart语言解密】想要深入了解Dart语法和类型变量吗?
171 0
|
Dart
Dart之枚举
Dart之枚举
103 0
Dart之枚举
|
Dart
Dart之 方法定义
Dart之 方法定义
116 0
Dart之 方法定义