Dart语法——看这一篇就够了

基本类型

  1. int和double是num子类,没有float类型;

  2. 支持字符串模板,用${expression}的方式来实现字符串效果,类似如字符串拼接;

  3. String可以使用单引号或者双引号;

  4. Dart没有数组,只有列表;

  5. 其中List,Set,Map不是抽象接口,是具体实现类,可直接使用;

  6. Map的key没有指定类型,key类型不一致不会报错;key不能相同,但是value可以相同,value可以为null。

var name = ‘Tom’;

// 使用$来实现name参数传入

var student = ‘name is:$name’;

// 使用构造函数创建List对象,和java一样

var list = List();

list.add(1);

// 创建不可变List

var list1 = const[1,2];

// for-in循环,这里用到Dart中的in关键字

var list2 = [1,2,3,4];

for (var i in list2) {

print(i);

}

void main() {

// 通过构造器创建Map

Map map = new Map();

map[‘a’] = ‘Android’;

map[‘b’] = ‘Flutter’;

map[‘c’] = ‘IOS’;

print(map);

// 通过复制的方式

Map map1 = Map.of(map);

print(map1);

// 直接声明来创建Map

Map map2 = {‘a’: ‘Android’, ‘b’: ‘Flutter’, ‘c’: ‘IOS’};

print(map2);

}

方法

  1. 方法也是对象,方法可赋值给一个变量;

  2. 如果方法的参数是解构出来的可以通过 @required 注解标注为必填 const Scrollbar({Key key, @required Widget child});

  3. 支持可选参数,可选命名参数用{}包围,可选位置参数写在最后并且使用[]包围 String say(String from, String msg, [String device]);

  4. 支持默认参数 void enableFlags({bool bold = false, bool hidden = false}) {…};

  5. 以_开头的方法都是私有的。

void main() {

// 方法赋值给myarea对象

var myarea = _area(2,3);

print(myarea);

print(area2(2));

print(area3(2, height: 1, judge: false));

}

num _area(num width, num height) {

return width * height;

}

// 使用@required来标注必须参数

num area1({@required num width, @required num height}) {

return width * height;

}

// 可选参数

num area2(num width, [num height]) {

if (height != null) {

return width * height;

}

return 0;

}

// 默认参数

num area3(num width, {num height = 1, bool judge = true}){

if (judge) {

return width * height;

}

return 0;

闭包

支持闭包,闭包能够访问外部方法内部的局部变量

void main() {

var foo = a();

foo ();

foo ();

foo ();

foo ();

}

// 定义闭包

a() {

int count = 0;

// 匿名函数

return (){

print(count++);

};

}

嵌套函数

// 外层函数

void showName(var name) {

// 函数中嵌套函数

void printName(var name) {

print(“Hello name is: $name”);

}

// 使嵌套函数生效

printName(name);

}

// 主函数调用

void main() {

showName(“Tom”);

}

操作符

1.空替换?? expr1 ?? expr2,如果expr1是non-null,返回其值。否则执行expr2并返回其结果;

2.条件成员访问?.P?.y = 4; 如果p是non-null,则设置y的值等于4;

3.类型判定操作符(as,is,is!);

4.级联操作,可以在同一个对象上连续调用多个函数以及访问成员变量;

// 条件操作符(特有的 ??)

var oldState ;

// 传统的写法

var newState = (oldState == null) ? oldState : ‘not final’;

// 使用??操作符

var newState1 = oldState ?? ‘not final’;

// 避空(特有的?.)

void main() {

Person person = new Person(‘Tom’);

Person person1 = null ;

// person 非空,正常返回

print(person?.name);

// person1为空,正常返回null

print(person1?.name);

// peroson1为空,报异常

print(person1.name);

}

class Person {

final String name;

Person(this.name);

}

// 类型判定操作符(as,is,is!,):

void main() {

var person = new Person();

// 判断person是不是Person类型

if (person is! Person) {

print(“person is not Person type”);

}

if (person is Person) {

person.name = ‘Tom’;

print(person.name);

}

// 上面代码可以使用as简化,as是把操作符对象转化为特定的类型

(person as Person).name = ‘Tom’;

print(person.name);

// 上面两种写法有区别,第一种是如果是true就执行里面的内容,false就不执行;

// 第二种情况使用as会抛出一个异常

}

class Person {

var name;

}

// 级联操作

// 获取一个id为btn1的按钮对象

var btn = query(‘#btn1’);

btn.text = ‘确定’;

btn.classes.add(‘ButtonStyle’);

btn.onClick.listen((s) => window.alert(‘ok’));

// 上面代码等价于

query(‘#btn1’)

…text = ‘确定’

…classes.add(‘ButtonStyle’)

…onClisk.listen((s) => window.alert(‘ok’));

异常

  1. 和java不同的是,Dart可以抛出任意类型的对象;

  2. 程序不会强制要求开发中处理异常,但若发生异常,程序会中断;

  3. 其中异常主要分为Error和Exception两种类型。

void main() {

try {

test();

} on RangeError catch (e) {

print(e);

} on Error catch (e) {

print(e);

} finally {

print(‘finally’);

}

}

test() {

throw RangeError(“下标越界”);

}

  1. 创建对象可以不使用new关键字;

  2. Dart中没有public,private,protected这些关键字;

  3. 没有interfaces关键字,每一个类都是一个接口。我们可以用抽象类来类比java中的接口;

  4. Dart把多重继承的类叫做Mixins。

main() {

var point = new Point();

point.run();

// 这里会执行P类中的run()

// 可以理解成优先级覆盖,子类>重用>父类

P p = new P();

p.run();

Q q = new Q();

q.run();

}

class Point {

void run() {

print(“Point run…”);

}

}

class Note {

void run() {

print(“Note run…”);

}

}

// 多继承

class P extends Point with Note {

void run() {

print(“P run…”);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值