Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones

原创 2015年07月10日 11:00:59

Mastering Dart

目录

基础

  1. 模块化
    1. pubspec.yaml
    2. import 'dart:html' as dom;
  2. 习俗:_前缀代表私有
  3. import 'animation.dart' as animation hide Animation; //似乎代码会直接影响IDE的自动完成?
  4. Dart的函数可以认为是JS去掉了无用的function关键字?
    1. void main() { ... }
  5. 引入了PHP的字符串模板:print("Result=#{result}");
  6. 函数简写法:sub(a,b) => a-b; //ES6直接支持?
  7. Class与mixin
    1. 奇怪的构造函数参数写法:Car(this.color, this.carrying);
    2. abstract(抽象基类就是接口)
    3. extends/implements
    4. mixin是特殊的Class,使用with关键字混入目标类,条件:
      1. 无(声明的)构造函数
      2. 无超类(或者说就是Object)
      3. 不包含对super的调用
    5. static const List L = const ['A', 'B', 'C'];

高级技术/反射

  1. 泛型
  2. Function:定义了call方法的class(vs C++里的函数对象?)
  3. 错误 vs 异常(可恢复)
    1. try { ... } on Error catch(ex) { ... }
  4. Annotations
    1. @deprecated
    2. @override
    3. @proxy
      1. 代理类:@override noSuchMethod(Invocation invo) { ...... } //借用了Ruby的思想?
    4. 定制:(嗯?似乎就是普通class)
  5. 反射
    1. Mirrors:ClassMirror MethodMirror
      1. 3个主要方法:reflect reflectClass reflectType
      2. 动态调用:class MethodInvoker implements Function {
        call(MethodMirror method){
        ClassMirror c = method.owner as ClassMirror;
        InstanceMirror inst = c.newInstance(new Symbol(), []);
        inst.invoke(method.simpleName, []); //语法上借鉴了Java;

对象创建

  1. 可选{位置、命名}参数:Car([this.color='w', this.weight=1000]); / Car({this.color:'w', this.weight:1000});
  2. 命名构造:Car.fromIem(String item) { ... } //其实不就是C++里的工厂方法嘛
  3. 重定向构造(莫名其妙的说法,其实不就是构造函数的实现调用另一个构造函数嘛)
    1. Dart借鉴了C++的成员初始化列表语法?
  4. 私有构造:Car._();
  5. 工厂构造:这里实际上使用了抽象工厂设计模式
    1. abstract class Log { factory Log() { return new ConsoleLog(); } ... }
  6. 常量构造:加const限定,枚举类?
  7. 变量在使用前必须初始化?type 'Null' is not a subtype of type 'boolean expression'.
    1. 赋值为null呢?
  8. 级联调用:..(这个语法比较丑陋,看不惯)

异步编程

  1. 调用栈 vs 事件驱动
  2. Future
    1. new File('a.txt').open().then(processFile);
    2. processFile(RandomAccessFile file){ file.length().then( (int len){ file.read(len).then(readFile).whenComplete( ... ) }); }
    3. catchError
    4. mirotask:优先于event被event-loop执行
    5. 推迟:new Future.delayed(new Duration(seconds:1), computation).then( (ret)=>print(ret) );
  3. Zones
    1. 一种可配置的执行上下文,用于处理异步任务和未捕获的异常:runZoned((){...}, onError: (e){...});
      1. zoneValues: ...
      2. zoneSpecification: ...
      3. 重载run以跟踪zone的执行:
        1. print: (Zone self, ZoneDelegate parent, Zone zone, String msg){...}, run: (Zone self, ZoneDelegate parent, Zone zone, f) => run(parent, zone, f, timer) //这里的代码有点难以理解,比如self与zone的区别?
  4. Isolates:可以认为是单独的进程(不共享数据,仅通过复制的消息通信)
    1. 代码略... 并发:每秒24000请求??

Stream框架

  1. new File().openRead().pipe(request.response);
  2. 单个订阅 vs 广播
  3. Stream类(有点LINQ的味道)
    1. 验证方法:any every contains
    2. 搜索:firstWhere lastWhere singleWhere
    3. 过滤:where skip skipWhere take takeWhere

下略(Stream无非就是FP里惰性序列的应用)

Collection框架

  1. The Lazy Iterable(这个例子似乎不太恰当?)
  2. SplayTreeSet?(见鬼,Java里的TreeSet也是用Splay树实现的吗)
  3. Unmodifiable集合:不是Scala里的Immutable集合,仅仅在API级别做了运行时限制而已

Dart与JavaScript互操作

  1. with jQuery:JProxy
  2. dart:js
    1. 性能测试的例子很扯淡,我严重怀疑下面这个语句的真正实现:container.appendHtml('
      Test
      ');

国际化和本地化

  1. Intl库

C/S通信

  1. dart:io HttpClient
  2. dart:html DivElement?
  3. Ajax polling(这个已经有点落伍了,不直接用WebSocket吗)
  4. SSE(tooold)
  5. WebSocket(基于TCP,但使用HTTP完成握手)

高级存储

  1. Cookies
  2. Web Storage
  3. Web SQL
  4. IndexdDB

支持其他HTML5特性

  1. 通知
  2. 原生拖放
  3. geolocation
    1. 对哦,为什么不能让用户直接指定位置作为输入呢,非得依赖什么GPS
  4. Canvas

安全

  1. TLS
  2. CAPTCHA 

相关文章推荐

《Mastering Opencv读书笔记》第一章 实现图像卡通效果

这本书和配套代码网上都有得下载。 要实现书中的效果,只要三步:1.使用拉普拉斯算子提取轮廓  2.使用双边滤波器对图像进行平滑 3.根据第一步得到的轮廓模版图,将第二步的结果拷贝过去【填充轮廓图中全...

Mastering Bitcoin(掌握比特币)读书笔记

Mastering Bitcoin 目录 1 介绍2 比特币如何工作3 比特币Client4 密钥、地址、钱包5 事务(交易)6 比特币网络7 块链8 挖矿与Consensus9...
  • cteng
  • cteng
  • 2016年04月06日 20:31
  • 2571

《Mastering Opencv ...读书笔记系列》车牌识别(II)

继上一篇文章后,现在要做的就是从车牌图像上使用optical character recognition算法将字符提取出来。对于每一块被检测的车牌,使用带监督的神经网络机器学习算法来识别字符。 本文内...

《Mastering Opencv ...读书笔记系列》车牌识别(I)

一、ANPR简介:   Automatic Number Plate Recognition (ANPR),,是一种使用Optical Character Recognition (OCR)和其他分...

Mastering Web Application Development with AngularJS-Packt 2013 读书笔记(不错的好书!)

Angular Zen Batarang Batarang is a Chrome developer tool extension for inspecting the AngularJ...
  • cteng
  • cteng
  • 2017年08月03日 14:29
  • 350

Mastering Python-Packt Publishing 2016(读书笔记)第1版(讲解3.5的coroutine、asyncio、metaclass等)

Mastering Python:Master the art of writing beautiful and powerful Python by using all of the feature...
  • cteng
  • cteng
  • 2016年08月02日 16:31
  • 612

系列讲座——怎样写读书笔记

  • 2008年11月12日 23:16
  • 42KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones
举报原因:
原因补充:

(最多只允许输入30个字)