Dart 2.7 发布,新增扩展方法支持

栏目: 软件资讯 · 发布时间: 5年前

内容简介:Dart 2.7 发布了,此版本添加了对扩展方法的支持,并带来一个用于处理带有特殊字符的字符串的新程序包。DartPad 中 null 的安全性也得到了更新。 扩展方法 Dart 2.7 添加了一个强大的语言新功能:扩展方法(exten...

Dart 2.7 发布了,此版本添加了对扩展方法的支持,并带来一个用于处理带有特殊字符的字符串的新程序包。DartPad 中 null 的安全性也得到了更新。

Dart 2.7 发布,新增扩展方法支持

扩展方法

Dart 2.7 添加了一个强大的语言新功能:扩展方法(extension methods)。它使你可以向任何类型(甚至是无法控制的类型)添加新功能,并具有常规方法调用的简洁性和自动完成性。

让我们看一个小例子:增加对从字符串解析整数和双精度的支持。作为应用开发人员,我们无法更改 String 类,因为它是在 dart:core 库中定义的,但是通过扩展方法,我们可以对其进行扩展。定义此扩展名后,我们可以在 String 上调用新的 parseInt 方法,就好像该方法是在 String 类本身上定义的一样:

extension ParseNumbers on String {
  int parseInt() {
    return int.parse(this);
  }  double parseDouble() {
    return double.parse(this);
  }
}main() {
  int i = '42'.parseInt();
  print(i);
}
  • 扩展方法是静态的
  • 扩展可以具有类型变量
  • 扩展方法实际上是扩展成员

关于扩展方法的内容太多,此处不做详述,详情参见更新说明

安全子字符串处理

Dart 的标准 String 类使用 UTF-16 编码。这是编程语言中的常见选择,尤其是那些支持在设备和 Web 上本机运行的语言。

UTF-16 字符串通常可以很好地工作。但是,在处理字符串时,尤其是在处理用户输入的字符串时,可能会遇到用户理解为字符的字符与 UTF-16 中编码为代码单元的字符之间的差异。让我们看一个小例子,提取用户输入的字符串的前三个字符:

var input = [‘Resume’];
input.forEach((s) => print(s.substring(0, 3)));$ dart main.dart
Res

到目前为止没有问题;我们在输入列表中打印了字符串的前三个字符,结果为 Res。现在,我们考虑来自不同地区的用户,他们可能会输入包含重音符号,韩语(韩语脚本)甚至是表情符号组合的字符串来代表“恢复”概念:

Dart 2.7 发布,新增扩展方法支持

对于 Re′sumé,为什么我们得到一个“两个字符”的字符串?对于那两个 emoji,奇怪的问号是怎么回事?这里的问题出在 Unicode。实际上,Résume 中的重音符号 e 是两个代码点:e 和组合的重音符号。

就像之前说过的,通常不需要担心字符和代码点。如果你要做的只是接收、传递并移交整个字符串,则内部编码是清晰可见的。但是,如果需要遍历字符串的字符或操纵字符串的内容,就可能会遇到麻烦。

Dart 2.7 引入了一个新的字符包,用于处理这些情况。此程序包支持将字符串视为用户感知的字符序列,也称为 Unicode 字形簇。使用字符包,可以通过对缩短文本的代码进行少量更改来修复代码:

// Before:
input.forEach((s) => print(s.substring(0, 3)));// After, using the characters package:
input.forEach((s) => print(s.characters.take(3)));

首先,我们从 s 中的字符串创建一个新的 Characters 实例(使用方便的 .characters 扩展方法)。然后使用 take() 方法提取前三个字符即可。

新版本还带来了 Null 安全性预览。

更多详细信息,参见:

https://medium.com/dartlang/dart-2-7-a3710ec54e97


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

一目了然

一目了然

Robert Hoekman, Jr. / 段江玲 / 机械工业出版社华章公司 / 2012-3-19 / 59.00元

可用性或易用性是软件或Web设计师的重要设计目标之一。本书深入阐述了如何设计出简单易用的基于Web的软件,以帮助读者理解、掌握显性设计的精髓。作者从软件开发初期谈起,一直到软件设计后期,分析诸多案例并论证了自己的见解或设计原则。本书在第1版的基础上进行了重大改进,尤其是在设计思想上,作者在本书中谈到“以用户为中心的设计”、“以任务为中心的设计”以及“以情景为中心的设计”的理念。这种设计理念也将更直......一起来看看 《一目了然》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具