这是摘要
[TOC]
Usage
class
-
所有修饰默认为
公有
,但是没有public
这些关键字 -
以
_
开头修饰为私有
-
main()
在类外部,内部识别不到 -
Bicycle(this.cadence, this.speed, this.gear);
等价于
Bicycle(int cadence, int speed, int gear) { this.cadence = cadence; this.speed = speed; this.gear = gear; }
-
默认的
toString()
只给出类型信息 -
string中使用
$value
插值 -
使用
=>
简写单行函数体 -
属性拥有默认的
setter
、getter
,除非显示地声明 -
使用
const
修饰构造函数,如果传入的参数相同,得到的对象为同一个常量,反之不是;在使用时也需要加const
-
构造函数不会被继承
-
命名构造函数,例如
class Point { num x, y; Point(this.x, this.y); // 命名构造函数 Point.origin() { x = 0; y = 0; } }
optional parameters
-
不支持同名函数重载
-
带默认值参数用花括号,例如
// This constructor uses optional named parameters. Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
factory
-
使用
factory
修饰工厂构造函数,可以返回一个实例。例如abstract class Shape { factory Shape(String type) { if (type == 'circle') return Circle(2); if (type == 'square') return Square(2); throw 'Can\'t create $type.'; } num get area; }
interface
- 没有
interface
关键字,使用implement
时,获得其所有字段和方法,但与extends
不同,需要一一实现
functional programming
-
函数拥有类型
Function
-
如果方法名为call,可以直接通过对象调用。例如
class A { call(String a, String b, String c) => '$a $b $c!'; } main() { var wf = new A(); var out = wf("Hi","there,","gang"); print('$out'); }
-
集合类拥有类似
stream
的函数式操作
async/await
null operator
??
expr1??expr2 <==> expr1 == null ? expr2 : expr1
?.
expr1?.expr2 <==> expr1 != null ? expr2 :
PREVIOUSspring framework
NEXTjvm