赞
踩
上一期主要介绍了dart和其他一些新语言比较类似的特性,这一期介绍一些dart里面独有,或者在其他语言里比较少看见的特性。
1.内置对fluent api的支持,中文翻译过来应该是链式调用,或者流式调用
目前很多语言的库都喜欢搞成fluent api,最知名的应该是jquery库了,实现也很简单,在方法最后返回this就可以。不过也有些时候实在没法返回this。
不过dart语言提供了内置的支持
void main() {
querySelector('#sample_text_id')
..text = 'Click me!'
..onClick.listen(reverseText);
}
..操作符可以保证方法调用发生在一个对象上。
2.字符串内插,这个上期忘说了,其实也是很多语言都有的一个功能。目前编程语言中字符串处理的功能是越来越重要了。相比较于几十年前计算机多用于科学计算领域,现在估计用于数据处理,字符处理的程序会更多。
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');
3.内建的assert支持
不同于很多语言assert类似功能作为一个库的做法,dart的assert是作为语言特性实现的
4.命名构造器
dart的构造器可以命名,方便调用。不过感觉比较鸡肋,因为现在都是工厂模式创建比较常见。和这个的意义也差不多吧。
class Point {
num x, y;
Point(this.x, this.y);
// 命令构造器,是不是和工厂模式很像?
Point.origin() {
x = 0;
y = 0;
}
}
5.常量构造器
快速实现单例模式的一种模式,话说现在在语言级别支持设计模式的是越来越常见了。比如kotlin的by组合模式,object单例模式,with构造器模式,company object 工厂模式,ruby的mixin组合模式….
class ImmutablePoint {
static final ImmutablePoint origin =
const ImmutablePoint(0, 0);
final num x, y;
#const构造器每次返回的实例都是同一个
const ImmutablePoint(this.x, this.y);
}
6.工厂构造器
这个是隐式的一个工厂模式实现,提供了缓存功能(缓存是要自己实现的)
class Logger {
final String name;
bool mute = false;
// 自己创建缓存,然后new的时候会隐式调用factory方法
static final Map<String, Logger> _cache =
<String, Logger>{};
factory Logger(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final logger = new Logger._internal(name);
_cache[name] = logger;
return logger;
}
}
Logger._internal(this.name);
void log(String msg) {
if (!mute) print(msg);
}
}
7.空方法调用
应该是一种快速实现动态代理的方式,(就是静态语言都想变得更动态一点)
class A {
// 覆盖此方法后,对未知方法的调用都会重定位到这里,然后你就可以做一些和java动态代理差不多的事情
@override
void noSuchMethod(Invocation mirror) {
print('You tried to use a non-existent member: ' +
'${mirror.memberName}');
}
}
8.mixin
和ruby的mixin类似。
现在都是能不能单继承就不用单继承了(其实mixin就是一种变相的多继承)
9.异步特性
现在很多新语言或者框架都是因为对异步和并发的良好支持而火的,比如框架有netty,nodejs。语言有go,erlang。
我觉得随着今后网络设备越来越多,网络越来越发达。异步和并发编程会越来越重要。
//异步方法需要显式的标记为async
//await会等待方法返回后才回调,不过写起来就像是同步代码块一样。
Future checkVersion() async {
var version = await lookUpVersion();
// Do something with version
}
10.Metadata
类似java的注解
11.可调用的类,就是把类可以当做方法一样调用,没什么卵用,我记得kotlin也有。然后和js这种构造方法和普通方法不分的有点像。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。