Dart语法——看这一篇就够了,Android架构师必备技术
expr2,如果expr1是non-null,返回其值。否则执行expr2并返回其结果;// 上面两种写法有区别,第一种是如果是true就执行里面的内容,false就不执行;Dart中没有public,private,protected这些关键字;// 上面代码可以使用as简化,as是把操作符对象转化为特定的类型。程序不会强制要求开发中处理异常,但若发生异常,程序会中断;和java不同的是,Dar
闭包
支持闭包,闭包能够访问外部方法内部的局部变量
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’));
异常
-
和java不同的是,Dart可以抛出任意类型的对象;
-
程序不会强制要求开发中处理异常,但若发生异常,程序会中断;
-
其中异常主要分为Error和Exception两种类型。
void main() {
try {
test();
} on RangeError catch (e) {
print(e);
} on Error catch (e) {
print(e);
} finally {
print(‘finally’);
}
}
test() {
throw RangeError(“下标越界”);
}
类
-
创建对象可以不使用new关键字;
-
Dart中没有public,private,protected这些关键字;
-
没有interfaces关键字,每一个类都是一个接口。我们可以用抽象类来类比java中的接口;
-
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…”);
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。



由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿
点击GitHub领取
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频*
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-88p5DQCH-1710834024923)]
最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿
点击GitHub领取
[外链图片转存中…(img-o9hPxnVE-1710834024924)]
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)