Cascade Notation in Dart is Magic
在编写 Python 代码的时候,sort()
和 sorted()
是两个不同的函数,对于列表 l = [2, 6, 1]
,
可以用 l.sort()
来进行排序,也可以用 sorted(l)
来进行排序。但是如果打印出来会发现,
>>> print(l.sort())
None
>>> print(sorted(l))
[1, 2, 6]
原因是 sorted()
返回(return)的是变换后的列表,.sort()
是对列表进行原位地排序,虽然列表改变了,但是返回的是 None。
所以要输出 .sort()
的结果,需要两步。
>>> l.sort()
>>> print(l)
[1, 2, 6]
这可能是 Python 维护了两个排序函数的原因,同时 sorted
的使用频率也高一点。
Dart 语言里面 List 也有 .sort()
函数,和 Python 类似,运行以下代码,输出的结果是 {null}
。
void main() {
var l = [2, 6, 1];
print(l.sort());
}
但是 Dart 里面无需额外的 sorted()
函数来实现这个功能,只要把 l.sort()
换成 l..sort()
即可获取排序后的列表。
这里用到了 Dart 的 Cascade Notation1,..
表示调用函数后依旧返回对象本身。
因此,可以高效地实现很多有趣的功能,例如:
void main() {
var l = [1, 6, 2];
l
..add(10)
..add(8)
..add(20)
..sort();
print(l);
}
// output: [1, 2, 6, 8, 10, 20]
Last modified on 2023-11-01