Dart语法——看这一篇就够了,互联网行业“中年”危机

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;

闭包

支持闭包,闭包能

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

**开源项目:【qq.cn.hn/FTe】 **

够访问外部方法内部的局部变量

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…”);

}

}

class Q implements Point {

@override

void run() {

print(“Q run…”);

}

}

构造函数

  1. 支持语法糖 Point(this.x, this.y);

  2. 每个实例变量都会自动生成一个getter方法,Non-final变量还会自动生成一个setter;

  3. 命名构造函数,使用命名构造函数可以为一个类实现多个构造函数,也能更加清晰的表明你的意图;

  4. 构造函数不能被继承,如果子类没有自定义的构造函数,会有一个默认的构造函数。

Note {

void run() {

print(“P run…”);

}

}

class Q implements Point {

@override

void run() {

print(“Q run…”);

}

}

构造函数

  1. 支持语法糖 Point(this.x, this.y);

  2. 每个实例变量都会自动生成一个getter方法,Non-final变量还会自动生成一个setter;

  3. 命名构造函数,使用命名构造函数可以为一个类实现多个构造函数,也能更加清晰的表明你的意图;

  4. 构造函数不能被继承,如果子类没有自定义的构造函数,会有一个默认的构造函数。

[外链图片转存中…(img-aNEaM7pq-1641560649428)]

[外链图片转存中…(img-TrhWwrnt-1641560649429)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值