基本数据类型
Dart中支持以下数据类型:
Numbers
Strings
Booleans
List(也就是数组)
Maps
num有2个子类型,int和double.
控制流程
循环,if esle,switch case,try catch等等和java相差不大,有些细微差异,可以在使用时深入了解。
final和const
const和final定义的都是常量,值不能改变,并且在声明的时候就必须初始化。
但是也有细微差别,简单来说
const定义的是编译时常量,只能用编译时常量来初始化
final定义的常量可以用变量来初始化
final time = new DateTime.now(); //Ok
const time = new DateTime.now(); //Error,new DateTime.now()不是const常量
关于类和对象
dart中所有的基础类型、函数、类等等都是继承自Object,默认值是null,可以调用自有的方法。
类的定义使用class关键字,创建对象使用new关键字,创建不可变对象需要使用const关键字
每个字段都对应一个隐式的Getter和Setter,你可以使用get和set关键字扩展功能,如果字段为final或者const的话,那么它只有一个getter方法
抽象类
在Dart中类和接口是统一的,类就是接口。如果你想重写部分功能,那么你可以继承一个类,如果你想实现某些功能,那么你也可以实现一个类。
使用abstract关键字来定义抽象类,并且抽象类不能被实例化,抽象方法不需要关键字,直接以分号 ; 结束即可。
注意:当使用 implements的时候,子类需要重写父类的成员变量和方法,包括私有的成员和方法.
函数
函数和java成员方法有些区别,但是基本写法差不多,下面是简单的例子
String sayHello(String name){
return 'Hello $name!';
}
当没有指定返回值时,默认返回null,如果能推断类型,可以省略返回类型。但是建议写入参类型和返回类型,这样方便阅读和维护。
如果函数体只有一条表达式,可以使用箭头语法,=>expr;
于是上面的代码可以写成这样:
sayHello(name) => 'Hello $name!';
还可以定义匿名函数:var sayHello = (name)=>'Hello $name!';
函数闭包
核心就是理解函数也是对象,可以作为函数的返回类型。
Function makeSubstract(num n){
return (num i) => n - i;
}
void main(){
var x = makeSubstract(5);
print(x(2));
}
可选参数
dart中支持命名可选参数和位置可选参数,但是不能同时混用。
命名可选参数使用大括号{},默认值用冒号:
位置可选参数使用方括号[],默认值用等号=
注意:命名可选参数在sdk1.2.1之后可以使用冒号‘:’和等号‘=’来赋值默认值。
函数别名
可以使用typedef来定义函数,这样可以使用这个名字来关联该函数。
typedef int Compare(int a, int b);
int sort(int a, int b) => a - b;
main() {
assert(sort is Function);
assert(sort is Compare);
}
总结
从基础语法和使用习惯来看和java差别很小,当然更深入的差别有待继续学习。