闲话Dart精髓语法5--类与对象篇

闲话Dart精髓语法4--逻辑操作篇 - 简书

Dart Logo

好了, 小伙伴们, 今天让我们来一起来过一下本系列中最麻烦的类和对象. 这部分不论在什么编程语言中, 都是值得我们深入掌握的. 毕竟我们通常都是会构建很多个自己的自定义类来支撑起我们项目中各式各样的业务需求.

好了, 分隔线后我们进入正题. 


1. Classes:

    a. Dart是OO(object-oriented)类型的语言. 而且是mixin-based inheritance. 跟java一样, 所有类继承自Object. 重要的事情戳三遍!!! 这里要mark下这个mixin-based inheritance. 意思是在Dart里, 尽管所有的class都是只有一个父类, 一个class body可以在多个类的层级中使用. 这个到底是什么意思呢? 别着急, 我们会细谈mixin.

    b. 创建一个对象, 当然是用new和constructor一起. 举例如下.

create an object

    c. 重要的事情戳三遍!!! 注意, 在Dart 2里我们可以省略constructor之前的new. 这个在Flutter Beta 2我们已经可以试用了. 真的是很爽. 

omit new

    d. 用.操作符来访问成员变量以及成员函数. 没啥说的, 到哪里都是这样.

访问成员变量

    e. 用?. 来避免null. 这个和kotlin一样, 防null的. 

null check

    f. 重要的事情戳三遍!!! 有一些类提供constant的构造函数. 可以用于创建一个compile-time constant. 注意, Dart 2允许我们省略const关键字. 

const

    g. 重要的事情戳三遍!!! 当我们构建2个相同的compile-time constants的话, 会生成同一个权威的instance. 如下例中的a和b是一个instance.

single const

    h. 由于Dart里的object很多时候都是dynamic的, 所以如果我们想知道一个变量在runtime的时候的类型, 可以使用.runtimeType来查询.

runtimeType

2. Instance Variables:

    a. 没有设定初始值的实例变量为null. 重要的事情戳三遍!!!

    b. 实例变量自动带getter function. 如果这个实例变量没有用final定义, 也会自动生成setter.

getter and setter

3. Constructors:

    a. 注意, Dart建议我们仅仅应该在name conflict的时候在构造函数中使用this.

    b. 重要的事情戳三遍!!! Dart有简单的写构造函数的方法. 举例如下图. 这种用法在Flutter的各种sample中到处都是的说.

构造函数简单写法

    c. Default Constructors. 如果我们没有命名构造函数, 那么Dart会帮我们创建一个空参的构造函数. 

    d. 构造函数在Dart里不可继承. 重要的事情戳三遍!!!

    e. Named constructor. 这个很有意思. 如果我们想有多个构造函数. 需要我们不同命名.

Named constructor

    f. 如果要在constructor中使用super的话, 一定要放在最后. 具体可参考Effective Dart: Usage | Dart. 举例如下图.

    g. Redirecting constructors. 这种constructor没有自己的body, 通过使用:来delegate main constructor.

    h. Constant constructors. 重要的事情戳三遍!!! 这个东东超级有用. 如果我们的一个class产生的对象永不变化的话, 我们可以把这些对象变为compile-time的constant. 那么怎么做到这样呢? 重点来了, 用constant constructor. 注意, constant constructor里的实例变量是final的. 在刚开始玩Flutter的时候, 我们经常要使用new或者const来创建widget. 很容易困惑于到底应该什么时候使用new或是const. 好消息是, Dart2后我们可以在创建对象的时候省略new和const. 这样会使我们的widget tree更简洁. 扯远了, 汗.

const constructor

    i. Factory constructors. 重要的事情戳三遍!!! 这个也超级有用. 如果我们不想每次创建一个新的instance的话, 就可以用这个. 调用方还是一样, 用new来调用. 但是底层实际上有可能没有创建一个新的实例. 

factory constructor

4. Methods:

    a. Instance methods, 实例方法是可以访问this的. 这个没啥可说的, 到哪里都一样.

    b. Getters and Setters, 这个在上面实例变量里已经说过了. Dart会帮我们自动创建的. 这里唯一要提一下的是, 我们可以通过实现getters和setters来增加额外的成员. 举例如下.

    c. Abstract methods, 抽象方法要用:来结尾. 注意, 抽象方法只能存在于抽象类中.

abstract methods

    d. Overide Operators. 我们可以复写操作符. 个人觉得这个不太常用.

5: Others:

    a. Abstract classes. 抽象类不可实体化. 如果我们实在需要实体化, 可以通过做个factory constructor. 个人认为这个也没啥必要. 因为通常情况下, 我们定义抽象类都是为了定义接口的.

    b. 自带interfaces. 重要的事情戳三遍!!! 这里要注意了, 在Dart里, 每一个类是自带一个interface的. 如果我们想用一个类的方法, 但是又不想继承这个类的实现, 我们可以使用implement. 举例如下.

    c. extend, 继承. 没啥可说的. 继承一个类用extend关键字. 访问父类用super关键字.

    d. Enumerated types. 这里要注意的是, 枚举在Dart中是用index来标记位置. 在Kotlin里我们用的是original. 别的没啥可说的, 枚举加switch, 跟豆浆油条一样. 不过用习惯了Kotlin里的when, 不要太嫌弃Dart的switch.

    e. Adding features to a class: mixins. 重要的事情戳三遍!!! 这个超级有用. 在Flutter里我们经常会用with某一个mixin. 像TickerProviderStateMixin. 

    e. Static. 静态变量和静态方法. 这里基本上Dart和Java一样. 没啥可说的. 要注意的是. 在Dart里, 静态变量只有在使用的时候才会被创建. 这个机制和Java完全不一样. 还有, Dart建议我们应该用top-level function来替代静态方法的使用.


好了, 今天就到这里了. 这一篇有些长, 主要是类和对象是我们每天编程必用的部分. 所以我们需要仔细扣下doc. 

下一篇我们要去玩泛型. 

欧了, 谢谢观赏, 大家加油!

闲话Dart精髓语法6--泛型篇 - 简书

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容