Dart 2.7 version 方法扩展(Extension methods)

1,906 阅读2分钟

Dart 2.7 添加了对扩展方法支持,以及一个用于处理带有特殊字符的字符串的新程序包

① 扩展方式:能够向任何类型,添加新的功能 ✔

• 任何类型🈯一切是对象,包括内置类型,函数也是对想

② 扩展方法是静态的 ✔

• 扩展方法是静态解析和分派的,这意味着您不能在类型为的值上调用它们dynamic。在这里,调用在运行时引发异常**

[Code]
dynamic field = '1';
field .parseInt();
→ Runtime exception: NoSuchMethodError
// 有效的 Code
var field  = '1';
field .parseInt();

③ 扩展可以具有类型变量 ✔

• 想象一下,我们想定义一个扩展,List以使元素达到偶数索引。我们希望此扩展适用于任何类型的列表,并返回与输入列表相同类型的新列表。我们可以通过使扩展名通用并将扩展名的类型参数应用于扩展名和扩展方法来做到这一点

[Code]
extension FancyList<T> on List<T> {
  List<T> get evenElements {
    return <T>[for (int i = 0; i < this.length; i += 2) this[i]];
  }
}

④ 扩展方法实际上是扩展成员 ✔

• 我们称之为功能扩展方法,因为如果您在其他编程语言中使用了相应的语言功能,则这是熟悉的术语。但是在Dart中,此功能更为通用:它还支持使用新的getter,setter和operator扩展类。在上面的FancyList示例中,evenElements是一个吸气剂。这是添加用于移动字符串的运算符的示例

[Code]
extension ShiftString on String {
  String operator <<(int shift) {
    return this.substring(shift, this.length) + this.substring(0, shift);
  }
}

⑤ 安全子字符串处理⭕

📃文档没看懂,有时间在覆写。

⑥ 空安全预览⭕

📃文档没看懂,有时间在覆写。

Personal daily notebook(个人日常笔记本) 💻rebook的macPro