Flutter核心技术与实战
陈航
美团点评高级技术专家
立即订阅
6150 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 为什么每一位大前端从业者都应该学习Flutter?
免费
01 | 预习篇 · 从0开始搭建Flutter工程环境
02 | 预习篇 · Dart语言概览
Flutter开发起步 (3讲)
03 | 深入理解跨平台方案的历史发展逻辑
04 | Flutter区别于其他方案的关键技术是什么?
05 | 从标准模板入手,体会Flutter代码是如何运行在原生系统上的
Dart语言基础 (3讲)
06 | 基础语法与类型变量:Dart是如何表示信息的?
07 | 函数、类与运算符:Dart是如何处理信息的?
08 | 综合案例:掌握Dart核心特性
Flutter基础 (13讲)
09 | Widget,构建Flutter界面的基石
10 | Widget中的State到底是什么?
11 | 提到生命周期,我们是在说什么?
12 | 经典控件(一):文本、图片和按钮在Flutter中怎么用?
13 | 经典控件(二):UITableView/ListView在Flutter中是什么?
14 | 经典布局:如何定义子控件在父容器中排版的位置?
15 | 组合与自绘,我该选用何种方式自定义Widget?
16 | 从夜间模式说起,如何定制不同风格的App主题?
17 | 依赖管理(一):图片、配置和字体在Flutter中怎么用?
18 | 依赖管理(二):第三方组件库在Flutter中要如何管理?
19 | 用户交互事件该如何响应?
20 | 关于跨组件传递数据,你只需要记住这三招
21 | 路由与导航,Flutter是这样实现页面切换的
Flutter进阶 (17讲)
22 | 如何构造炫酷的动画效果?
23 | 单线程模型怎么保证UI运行流畅?
24 | HTTP网络编程与JSON解析
25 | 本地存储与数据库的使用和优化
26 | 如何在Dart层兼容Android/iOS平台特定实现?(一)
27 | 如何在Dart层兼容Android/iOS平台特定实现?(二)
28 | 如何在原生应用中混编Flutter工程?
29 | 混合开发,该用何种方案管理导航栈?
30 | 为什么需要做状态管理,怎么做?
31 | 如何实现原生推送能力?
32 | 适配国际化,除了多语言我们还需要注意什么?
33 | 如何适配不同分辨率的手机屏幕?
34 | 如何理解Flutter的编译模式?
35 | Hot Reload是怎么做到的?
36 | 如何通过工具链优化开发调试效率?
37 | 如何检测并优化Flutter App的整体性能表现?
38 | 如何通过自动化测试提高交付质量?
Flutter综合应用 (6讲)
39 | 线上出现问题,该如何做好异常捕获与信息采集?
40 | 衡量Flutter App线上质量,我们需要关注这三个指标
41 | 组件化和平台化,该如何组织合理稳定的Flutter工程结构?
42 | 如何构建高效的Flutter App打包发布环境?
43 | 如何构建自己的Flutter混合开发框架(一)?
44 | 如何构建自己的Flutter混合开发框架(二)?
结束语 (1讲)
结束语 | 勿畏难,勿轻略
特别放送 (1讲)
特别放送 | 温故而知新,与你说说专栏的那些思考题
Flutter核心技术与实战
登录|注册

07 | 函数、类与运算符:Dart是如何处理信息的?

陈航 2019-07-13
你好,我是陈航。
在上一篇文章中,我通过一个基本 hello word 的示例,带你体验了 Dart 的基础语法与类型变量,并与其他编程语言的特性进行对比,希望可以帮助你快速建立起对 Dart 的初步印象。
其实,编程语言虽然千差万别,但归根结底,它们的设计思想无非就是回答两个问题:
如何表示信息;
如何处理信息。
在上一篇文章中,我们已经解决了 Dart 如何表示信息的问题,今天这篇文章我就着重和你分享它是如何处理信息的。
作为一门真正面向对象的编程语言,Dart 将处理信息的过程抽象为了对象,以结构化的方式将功能分解,而函数、类与运算符就是抽象中最重要的手段。
接下来,我就从函数、类与运算符的角度,来进一步和你讲述 Dart 面向对象设计的基本思路。

函数

函数是一段用来独立地完成某个功能的代码。我在上一篇文章中和你提到,在 Dart 中,所有类型都是对象类型,函数也是对象,它的类型叫作 Function。这意味着函数也可以被定义为变量,甚至可以被定义为参数传递给另一个函数。
在下面这段代码示例中,我定义了一个判断整数是否为 0 的 isZero 函数,并把它传递了给另一个 printInfo 函数,完成格式化打印出判断结果的功能。
bool isZero(int number) { //判断整数是否为0
return number == 0;
}
void printInfo(int number,Function check) { //用check函数来判断整数是否为0
print("$number is Zero: ${check(number)}");
}
Function f = isZero;
int x = 10;
int y = 0;
printInfo(x,f); // 输出 10 is Zero: false
printInfo(y,f); // 输出 0 is Zero: true
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Flutter核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • Young
    1.一般来讲,单继承,多实现,混入是多继承
    A.继承是子类需要复用父类的方法实现
    B.实现接口是复用接口的参数,返回值,和方法名,但不复用方法的实现,在Dart中实现抽象类 更像在java中实现用interface修饰的接口
    C.混入是多继承,当被混入的类有多个同名方法时,调用子类的该方法时,会调用with声明的最后一个拥有该方法的类中的该方法,同时混入中的父类不能继承

    作者回复: 厉害了

    2019-07-13
    3
    30
  • 宋锡珺
    1.
    父类继承:和java类似,继承了父类的实例变量和各种方法。但是不能用一个普通方法重写getter。
    抽象类:抽象类不能实例化,会报出AbstractClassInstantiationError错误。
    接口:成员变量,成员函数需要重新声明实现。和java不一样的是,没有接口声明,可以通过抽象类来描述接口。
    mixin:使一个类有多个父类。例如:在Flutter中常见的我们需要继承state。如果需要页面保持状态,我们还需要AutomaticKeepAliveClientMixin来保持页面状态。这时就需要通过with来使用mixin.
    2.
    子类构造函数调用父类非命名,无参构造函数。先父后子。
    1.初始化列表
    2.父类的无参构造函数
    3当前类的无参构造函数
    通过named constructors可以使父类有多个构造函数,但是子类是不能继承父类的构造函数的。如果使用父类的构造函数,子类需要实现父类的构造函数。

    作者回复: 厉害了

    2019-07-14
    6
  • Geek_869250
    mixin和react有什么不同,react已经不使用了

    作者回复: 没啥不同。Mixins 的问题在于太过于灵活,与OOP的设计思路完全相反,小范围用问题不大,但如果你的类中引用了多个mixin,必须非常清楚每个mixin都干了什么,你使用的方法来自于哪个mixin,否则有代码被覆盖的风险。

    2019-07-29
    1
    2
  • 昨夜星辰
    可选命名参数和可忽略参数有什么区别?

    作者回复: 对调用者调用方式不同,一个需要显式声明参数名,参数位置无所谓;一个不用,但需要按照顺序摆放参数。

    2019-07-17
    1
    2
  • Phony Lou
    一个小问题,在覆写相等运算符时为何需要传入dynamic变量,而不能传入Vector呢?
    bool operator==(dynamic v) => x == v.x && y == v.y;
    bool operator==(Vector v) => x == v.x && y == v.y; // 报错

    作者回复: 因为operator==是继承自Object类,这个类的参数声明就是dynamic

    2019-07-14
    2
  • 小白入门
    小白问下
    Point(this.x, this.y) : z = 0;
    这里的‘ : ’的用法解释? 和‘=>’有什么区别?

    作者回复: :用于构造函数初始化其内部属性或做一些前置检查;
    =>是用于普通单行函数的语法糖

    2019-07-14
    2
    1
  • Captain
    就像,具体什么是命名构造函数,好处是什么?什么是初始化列表?是指什么列表呢?好处是什么?

    作者回复: 命名构造函数就是给构造函数起了个名字,使用"类名.构造函数名"的方式初始化实例;
    初始化列表是在构造函数体外,对变量进行批量赋值的机制,不仅简洁,代码执行性能也更优。

    2019-11-13
  • 菜头
    命名构造函数?有例子吗

    作者回复: Point.bottom就是例子啊

    2019-10-15
  • 微笑美男😄
    有课件没 我是新手,按照课程上的示例代码写了以后,总是报错,运行不起来

    作者回复: 课程的全部示例代码参考:https://github.com/cyndibaby905/flutter_core_demo

    2019-09-30
  • 颜为晨
    可选命名参数是不是可以理解成 map?

    作者回复: 可以

    2019-09-10
  • Zxt
    为什么作为mixin的类 只能继承自object呢?也是为了防止多继承出现的菱形问题么?

    作者回复: Dart 1.13版本已经可以支持使用继承Object以外的类了

    2019-08-22
  • Zxt
    一个声明了构造函数的类 无法被别的类混入了 这个是为什么呢?

    作者回复: Mixin目前的实现是以完全忽略构造函数,忽略构造函数调用链的方式实现的,因此只支持隐式的构造函数。一旦放开mixin的构造函数支持,Dart势必需要支持一套新的关键字语法,来支持Mixin类继承链上的构造转发,代价太大。

    2019-08-21
  • Zxt
    请教个问题,一个类可以同时混入多个类嘛?

    作者回复: 可以呀

    2019-08-21
  • mj
    如果不加“_”,则默认为 public。不过,“_”的限制范围并不是类访问级别的,而是库访问级别

    请问库访问级别是什么意思

    作者回复: package

    2019-07-28
  • 云中大鹏
    dart中有没有的 == 与===的区别

    作者回复: 没有(但曾经有过)

    2019-07-23
  • JakePrim
    继承和接口实现,与java类似,但是混入就不太理解了,什么场景下会用到呢?flutter好像也用不到这么复杂的逻辑吧

    作者回复: 混入,以非继承的方式复用别的类的代码。

    恰恰相反哦,Flutter很多地方都用到了混入。

    2019-07-16
  • Mkl
    老师您好,请问“我们只要在声明变量与方法时,在前面加上“”即可作为 private 方法使用。如果不加“”,则默认为 public。”这里边的双引号中的内容是什么,看不到呀😳

    作者回复: 是“_”
    感谢提醒,我们改一下

    2019-07-13
收起评论
17
返回
顶部