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 Bitcoin(掌握比特币)读书笔记

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

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015年10月15日 10:07
  • 1914

《计算机网络-自顶向下方法》读书笔记-传输层篇

《计算机网络-自顶向下方法》读书笔记-传输层篇标签: 网络 读书笔记 校招 面试概述和传输层服务传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制端系统运行传输层协议 发送方 : 将应用递交...
  • u012990751
  • u012990751
  • 2015年10月29日 20:30
  • 1726

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

【原文:http://blog.csdn.net/jinshengtao/article/details/17954427】 继上一篇文章后,现在要做的就是从车牌图像上使用optical cha...
  • zhazhiqiang2010
  • zhazhiqiang2010
  • 2014年02月28日 16:42
  • 1782

arm体系结构与编程 读书笔记——Page72

  • 2008年05月20日 16:25
  • 304KB
  • 下载

阅读科学家——关于科学家传记的读书笔记(初稿,三思).chm

  • 2007年07月03日 16:25
  • 3.45MB
  • 下载

读书笔记——互联网架构

  • 2017年12月09日 22:43
  • 176KB
  • 下载

ARM体系结构与编程——读书笔记.doc

  • 2009年07月14日 13:08
  • 59KB
  • 下载

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

  • 2008年11月12日 23:16
  • 42KB
  • 下载

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

一、ANPR简介:   Automatic Number Plate Recognition (ANPR),,是一种使用Optical Character Recognition (OCR)和其他分...
  • jinshengtao
  • jinshengtao
  • 2014年01月05日 15:28
  • 43356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mastering Dart(读书笔记)——有意思的地方在于它的Future、Isolates和Zones
举报原因:
原因补充:

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