dart基础:和java的简单区别

基本数据类型

 

Dart中支持以下数据类型:

  • Numbers

  • Strings

  • Booleans

  • List(也就是数组)

  • Maps

num有2个子类型,int和double.

 

控制流程

循环,if esle,switch case,try catch等等和java相差不大,有些细微差异,可以在使用时深入了解。

 

final和const

 

constfinal定义的都是常量,值不能改变,并且在声明的时候就必须初始化。

但是也有细微差别,简单来说

  • 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,你可以使用getset关键字扩展功能,如果字段为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差别很小,当然更深入的差别有待继续学习。

你可能感兴趣的:(flutter)