Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones
来源:互联网 发布:java 就业培训机构 编辑:程序博客网 时间:2024/05/22 13:21
Mastering Dart
目录
- 1基础
- 2高级技术/反射
- 3对象创建
- 4异步编程
- 5Stream框架
- 6Collection框架
- 7Dart与JavaScript互操作
- 8国际化和本地化
- 9C/S通信
- 10高级存储
- 11支持其他HTML5特性
- 12安全
基础
- 模块化
- pubspec.yaml
- import 'dart:html' as dom;
- 习俗:_前缀代表私有
- import 'animation.dart' as animation hide Animation; //似乎代码会直接影响IDE的自动完成?
- Dart的函数可以认为是JS去掉了无用的function关键字?
- void main() { ... }
- 引入了PHP的字符串模板:print("Result=#{result}");
- 函数简写法:sub(a,b) => a-b; //ES6直接支持?
- Class与mixin
- 奇怪的构造函数参数写法:Car(this.color, this.carrying);
- abstract(抽象基类就是接口)
- extends/implements
- mixin是特殊的Class,使用with关键字混入目标类,条件:
- 无(声明的)构造函数
- 无超类(或者说就是Object)
- 不包含对super的调用
- static const List L = const ['A', 'B', 'C'];
高级技术/反射
- 泛型
- Function:定义了call方法的class(vs C++里的函数对象?)
- 错误 vs 异常(可恢复)
- try { ... } on Error catch(ex) { ... }
- Annotations
- @deprecated
- @override
- @proxy
- 代理类:@override noSuchMethod(Invocation invo) { ...... } //借用了Ruby的思想?
- 定制:(嗯?似乎就是普通class)
- 反射
- Mirrors:ClassMirror MethodMirror
- 3个主要方法:reflect reflectClass reflectType
- 动态调用:class MethodInvoker implements Function {
- call(MethodMirror method){
- ClassMirror c = method.owner as ClassMirror;
- InstanceMirror inst = c.newInstance(new Symbol(), []);
- inst.invoke(method.simpleName, []); //语法上借鉴了Java;
- call(MethodMirror method){
- Mirrors:ClassMirror MethodMirror
对象创建
- 可选{位置、命名}参数:Car([this.color='w', this.weight=1000]); / Car({this.color:'w', this.weight:1000});
- 命名构造:Car.fromIem(String item) { ... } //其实不就是C++里的工厂方法嘛
- 重定向构造(莫名其妙的说法,其实不就是构造函数的实现调用另一个构造函数嘛)
- Dart借鉴了C++的成员初始化列表语法?
- 私有构造:Car._();
- 工厂构造:这里实际上使用了抽象工厂设计模式
- abstract class Log { factory Log() { return new ConsoleLog(); } ... }
- 常量构造:加const限定,枚举类?
- 变量在使用前必须初始化?type 'Null' is not a subtype of type 'boolean expression'.
- 赋值为null呢?
- 级联调用:..(这个语法比较丑陋,看不惯)
异步编程
- 调用栈 vs 事件驱动
- Future
- new File('a.txt').open().then(processFile);
- processFile(RandomAccessFile file){ file.length().then( (int len){ file.read(len).then(readFile).whenComplete( ... ) }); }
- catchError
- mirotask:优先于event被event-loop执行
- 推迟:new Future.delayed(new Duration(seconds:1), computation).then( (ret)=>print(ret) );
- Zones
- 一种可配置的执行上下文,用于处理异步任务和未捕获的异常:runZoned((){...}, onError: (e){...});
- zoneValues: ...
- zoneSpecification: ...
- 重载run以跟踪zone的执行:
- print: (Zone self, ZoneDelegate parent, Zone zone, String msg){...}, run: (Zone self, ZoneDelegate parent, Zone zone, f) => run(parent, zone, f, timer) //这里的代码有点难以理解,比如self与zone的区别?
- 一种可配置的执行上下文,用于处理异步任务和未捕获的异常:runZoned((){...}, onError: (e){...});
- Isolates:可以认为是单独的进程(不共享数据,仅通过复制的消息通信)
- 代码略... 并发:每秒24000请求??
Stream框架
- new File().openRead().pipe(request.response);
- 单个订阅 vs 广播
- Stream类(有点LINQ的味道)
- 验证方法:any every contains
- 搜索:firstWhere lastWhere singleWhere
- 过滤:where skip skipWhere take takeWhere
下略(Stream无非就是FP里惰性序列的应用)
Collection框架
- The Lazy Iterable(这个例子似乎不太恰当?)
- SplayTreeSet?(见鬼,Java里的TreeSet也是用Splay树实现的吗)
- Unmodifiable集合:不是Scala里的Immutable集合,仅仅在API级别做了运行时限制而已
Dart与JavaScript互操作
- with jQuery:JProxy
- dart:js
- 性能测试的例子很扯淡,我严重怀疑下面这个语句的真正实现:container.appendHtml('Test');
- 性能测试的例子很扯淡,我严重怀疑下面这个语句的真正实现:container.appendHtml('
国际化和本地化
- Intl库
C/S通信
- dart:io HttpClient
- dart:html DivElement?
- Ajax polling(这个已经有点落伍了,不直接用WebSocket吗)
- SSE(tooold)
- WebSocket(基于TCP,但使用HTTP完成握手)
高级存储
- Cookies
- Web Storage
Web SQL- IndexdDB
支持其他HTML5特性
- 通知
- 原生拖放
- geolocation
- 对哦,为什么不能让用户直接指定位置作为输入呢,非得依赖什么GPS
- Canvas
安全
- TLS
- CAPTCHA
0 0
- Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones
- Dart Essentials(读书笔记)——这本书很大篇幅都在谈AngularDart,Zones概念没谈到
- Build Your Own Angularjs 读书笔记(AngularJS牛逼的地方在于它内嵌了一个表达式到Function对象的编译器。。。当然还有DI框架)
- 杭州公交车有意思的地方
- 《Mastering opencv....读书笔记》基于标记的虚拟现实
- 生命的意义,在于赋予它意义
- Dart 语言惯用语——Dart中特有的代码味道
- Dart的HTTP请求和响应(1)
- Dart的HTTP请求和响应(2)
- Dart的文件、目录和链接(1)
- Dart的文件、目录和链接(2)
- Dart的文件、目录和链接(3)
- 一个easyui treegrid有意思的地方
- Dart 出现不能识别.dart的文件
- Dart的数据库操作
- Dart的路径操作
- 卡耐基梅隆邢波眼里的人工智能:它的价值在于通用性
- bigemap地图下载器之所以厉害的地方在于这些?
- Linux下Socket编程的端口问题( Bind error: Address already in use )
- 操作4 mongodb备份脚本
- 玩codehunter level02
- 关于connect: network is unreachable 问题的解决
- nginx + ngx_lua安装测试
- Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones
- linux环境变量的临时设置,永久设置和其他。
- c++primer要点-表达式
- CodeForces 3DLeast Cost Bracket Sequence优先队列
- Android 分包机制
- 【设计模式】动态代理Proxy_02
- 黑马程序员——Java 面向对象(下)
- 根据浏览器导入不同css文件
- GRE写作必备句型