Dart笔记

来源:https://maiya.fan/blog?id=6566174f6aa58e39d930193e

1 总教程

https://blog.youkuaiyun.com/rd_w_csdn/article/details/103524452

2 线程及异步编程

详情查看:https://zhuanlan.zhihu.com/p/351946372。Dart是单线程,开辟新线程相当于开辟一个具有多进程的单线程。Dart会通过Future关键字实现将任务置于事件队列的异步任务队列,位于主队列后,等完成异步函数后,执行Furure.than传入的回调。aysn和await相当于将Future.than进行包装,await修饰的语句返回Future,await后的语句包装为than。

3 dart支持类型推断,通过var和dynamic实现类型推断

4 在Dart中,一切皆为对象,因此,final变量需要在构造函数中进行初始化,否则在初始化列表中初始化后,就不能在构造函数中赋值。

5 集合类型

List类元素需要类型相同,有序
Set类元素类型相同,无序
Map类类型相同,无序,键值对方式存储

6 如果一个标识符以下划线_开始,那么它和它的库都是私有的

7 try…on… catch…finally

on是指定异常类型,当异常发生时,执行以下代码
catch是捕获异常,得到异常的变量e,可以在接下来的代码块中进行调用。
finally是后续处理,当异常捕获结束后,执行该部分。try执行,finally也执行。

8 构造函数前面的的 new 关键字是可选的

9 在常量上下文中,构造函数或者字面量前的 const 可以省略。

10 继承、实现、混入同名函数的优先级

如果class继承或者实现了多个类,同一个方法调用的时候,实际使用的是哪个方法优先级为:with>extend>implements
如果with后面跟了多个类,后面的优先级大于前面的

11 当使用on关键字,则表示该mixin只能在那个类的子类使用。

12 在mixin中使用super关键字

这里super所指的父类不是mixin类的父类,而是继承mixin的类的上一个父类,该父类包含extend、implement、mixin。

13 mixin无构造函数

14 mixin的机制

https://blog.youkuaiyun.com/weixin_33698823/article/details/91874916

15 Dart参数类别

先后顺序:位置参数(必选)、位置参数(可选)、命名参数(都是可选)。
位置参数(可选)、命名参数(都是可选),不能同时使用。

16 箭头函数

箭头函数的语句只有一条,当具有返回值时,可以省略return。

17 Timer定时执行

Timer不会随Widget关闭而停止,其不依赖于类存在,可以认为是APP运行期间一直存在的服务。

<think>嗯,用户让我介绍一下Dart的学习笔记。首先,我需要考虑用户可能的背景。Dart通常用于Flutter开发,所以用户可能对移动应用开发感兴趣,或者想学习前端框架。不过也有可能他们只是单纯想学Dart语言本身。需要先覆盖基础,再提到应用场景,比如Flutter。 用户的需求是学习笔记,所以他们可能想要结构化的内容,分点列出关键知识点。我需要确保涵盖基本语法、核心概念、进阶内容以及学习资源。同时,用户可能希望了解学习Dart的难点和最佳实践,这样他们可以高效学习。 接下来,我要检查Dart的重要特性。比如,它是面向对象的、可选类型、支持异步编程,还有isolate的概念。需要解释这些概念,但保持简洁。比如,单线程模型和事件循环,这对于处理异步操作很重要,避免阻塞UI。 然后,常见的语法部分。变量声明可以用var和final,这点和JavaScript类似,但类型安全不同。函数部分,箭头函数和可选参数,还有命名参数,这些是Dart的特色。另外,空安全是Dart 2.12引入的,必须提到,因为它影响代码的安全性。 面向对象方面,Dart的Mixin和接口需要说明,可能用户对继承和Mixin的区别不太清楚,需要简单解释。异步编程中的Future和async/await,和JavaScript类似,但需要强调Dart的单线程模型如何处理异步。 进阶部分,生成器函数可能对处理集合数据有帮助,Isolate用于多线程,但不同于传统的线程,避免共享内存的问题。和Flutter的结合使用,可能是用户最终目标,所以这里需要提到,但不要深入Flutter本身,除非必要。 学习资源方面,官方文档是必须的,还有实践建议,比如做小项目。常见问题解答部分,可以帮助用户避免常见错误,比如类型推断、空安全导致的错误,异步处理的问题。 需要确保回答结构清晰,分点明确,使用例子时用正确的LaTeX格式,但根据用户要求,行内数学表达式用$...$,独立公式用$$...$$。不过Dart的学习笔记中可能数学公式不多,但如果有代码示例,需要用正确的代码块格式。不过用户没有提到代码格式,可能不需要,但需要确认。用户给的例子都是数学表达式,但这里可能需要代码块。不过根据系统指令,用户可能希望用LaTeX,但Dart代码应该用代码块,但用户没有说明。可能需要进一步明确,但根据用户提供的系统指令,重点在数学表达式的格式,其他可能按常规处理。因此,代码示例可以用代码块,而其他如变量名用行内代码。 最后,检查是否涵盖了所有关键点,结构是否合理,有没有冗余信息。确保回答帮助用户逐步学习,从基础到进阶,资源推荐,常见问题,这样的结构应该适合学习笔记的需求。</think>以下是一份结构清晰的Dart语言学习笔记整理,分核心概念、语法特性和实践建议: --- ### 一、Dart基础特性 1. **语言定位** - 面向对象、强类型(支持类型推断) - 单线程事件循环模型(通过`async/await`和`Isolate`处理并发) - 编译为原生代码(AOT)或即时编译(JIT),适用于跨平台开发 2. **核心优势** $$ \text{开发效率} \propto \text{热重载(Hot Reload)+丰富标准库} $$ --- ### 二、关键语法速查 1. **变量与类型** ```dart var name = 'Dart'; // 类型推断为String final int score = 100; // 运行时常量 const double pi = 3.14; // 编译时常量 dynamic dynamicVar = 5; // 运行时类型可变 ``` 2. **空安全(Null Safety)** ```dart String? nullableString = null; // 允许为null int nonNullableInt = 0; // 不可为null print(nullableString!.length); // 断言非空(慎用) ``` 3. **函数与箭头语法** ```dart // 命名参数+默认值 void greet({String name = 'Guest', int age}) => print('$name, $age'); // 异步函数 Future<void> fetchData() async { var data = await http.get('url'); print(data); } ``` --- ### 三、面向对象编程 1. **类与Mixin** ```dart class Animal with Walker { // Mixin实现代码复用 String name; Animal(this.name); // 构造方法简写 @override void move() => print('$name is moving'); } ``` 2. **工厂构造函数** ```dart class Logger { final String name; static final Map<String, Logger> _cache = {}; factory Logger(String name) => _cache.putIfAbsent(name, () => Logger._internal(name)); Logger._internal(this.name); } ``` --- ### 四、集合与操作符 1. **集合类型** ```dart List<int> numbers = [1, 2, 3]; Set<String> names = {'Alice', 'Bob'}; Map<String, int> scores = {'Math': 90}; ``` 2. **扩展操作符** ```dart var combined = [...numbers, 4, 5]; // [1,2,3,4,5] var nullList = [...?maybeNullList]; // 安全展开 ``` --- ### 五、异步编程模式 1. **Future链式调用** ```dart fetchUserData() .then((data) => parseJson(data)) .catchError((e) => logError(e)) .whenComplete(() => cleanup()); ``` 2. **Stream实时数据流** ```dart var counterStream = Stream.periodic(Duration(seconds: 1), (x) => x); counterStream.take(5).listen(print); // 输出0-4 ``` --- ### 六、最佳实践建议 1. **代码规范** - 使用`lowerCamelCase`命名变量/方法,`UpperCamelCase`命名类型 - 避免冗长类型声明(善用类型推断) - 优先使用`final`声明不可变变量 2. **调试技巧** ```dart void main() { assert(someCondition); // 开发环境校验 print(对象.runtimeType); // 运行时类型检查 } ``` 3. **学习路径** $$ \text{Dart基础} \rightarrow \text{Flutter框架} \rightarrow \text{实战项目} $$ --- **推荐资源**: - 官方文档:[dart.dev](https://dart.dev) - 交互练习:[DartPad](https://dartpad.dev) - 进阶书籍:《Dart编程语言实战》 通过系统学习基础语法后,建议通过Flutter项目实践快速巩固知识,例如实现一个天气预报应用或TODO List应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoilingHotPot

听说打赏我的人,都发顶会顶刊了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值