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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 04:40:19

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

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

http://blog.csdn.net/jinshengtao/article/details/17883075/  <Mastering Opencv ...读书笔记系列>车牌识别(I) http://blog.csdn.net/jinshengtao/article/details/17954427   <Mastering Opencv ...读书笔记系列>车牌识别(II) Mastering Opencv ...读书笔记系列>车牌识别(I) 标签: 车牌分割svm西

Mastering Nginx 读书笔记二

NGINX as a Reverse Proxy A reverse proxy is a web server that terminates connections with clients and makes new ones to upstream servers on their behalf. An upstream server is defined as a server that NGINX makes a connection with in order to fulfill

《创业者》读书笔记【转】

<创业者——全世界最成功的技术公司初创的故事>读书笔记: 推荐序一:从书中我们发现,尽管有些创业者一开始就有明确的目标,但更多的人似乎并没有想到他们会取得如此大的成熟,他们只是因为偶尔遇到个好点子,并且深深爱上了它,因而不懈地去追求,如此而已.很像一下初出初出茅庐的小伙子,某一天突然看见位姑娘令他一见倾心,穷追不舍,没想到终有一天抱得美人归时,发现她居然还是位富家女! blogger.com创始人埃文·威廉姆斯:在我看来,有一种行为是会经常扼杀成功的,那就是妥协:在别人的劝说下,不能坚持自己的

《演讲之禅:一位技术演讲家的自白》读书笔记

<演讲之禅:一位技术演讲家的自白>读书笔记 第1章 其实我看不到裸露的你 要知道你怎么对待错误,听众就会怎样对待错误: 你可以泰然处之,大家也就一笑而过:如果你大惊失色,大家同样会将注意力集中到这件事上: 因此,如果我在费城的下一个演讲时鞋子着火了,或者上楼梯时摔倒了,还在走道上摔了个嘴啃泥,我就可以将这些变成机遇. 以后要是发生什么还不及这个故事尴尬的事情时,我就可以拿这个故事说事了.我可以以一个灾难作为逃脱另一个灾难的衔接点了:"你认为这很令人尴尬吗?呃,以前我在费城的时候--&

[搬家from qzone] 读书笔记 爱是一种选择

因为自己的事情,今晚上会格外的颠簸,暂时就不去体会丰子恺诗一般的语言了,偷个懒,写点自己擅长的. 话说我有一个习惯,就是把愿意跟我深入交流的人变成我的心理咨询对象.时间久了就喜欢分析点什么,比方说每个人的心理倾向的成因,或者为什么总是喜欢轻视别人或者自己.不过这种行为经常受到我家mm的批评,一方面说我不专业,另外一方面说我总是分析别人不分析分析自己.确实,看到别人的毛病总是比承认自己的问题要容易,就让我能随着这本<爱是一种选择>,找找自己内心的缺失,挖掘挖掘自己内心深处那些常常让自己纠结,又看

世界是数字(读书笔记)

<世界是数字的>是世界顶尖计算机科学家Brian W.Kernighan写的一本计算机科普类读物,简明扼要但又深入全面地解释了计算机和通信系统背后的秘密,适合计算机初学者和非计算机专业的人读.这真的是一本好书,借Google常务董事长的话: 对计算机.互联网及其背后的奥秘充满好奇的人们,这绝对是一本不容错过的好书. 对于一个计算机已经学了N年的专业人士来说,这本书也许简单了点,不过我还是认真过了一遍,发现也有一定的收货,因为一个人很难掌握本领域里的所有知识,或多或少会有一些欠缺,总会有一些你以

Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Action 演示模式 3.2 Android Studio使用进阶 操作与导航 快速重构 代码模板 内置模板 自定义代码注释模板 代码分析 在Andr

5分钟读书笔记之 - 设计模式 - 工厂模式

一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一种模式,它使用一种方法来决定究竟实例化那个具体的类. 简单工厂模式 假设你想开几个自行车商店,每个商店都有几种型号的自行车出售,可以用这样一个类来表示: var BicycleShop = function(){} BicycleShop.prototype = { sellBicycle:func

【转】《windows核心编程》读书笔记

这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLastError可能用于描述成功的原因(CreatEvent)