Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

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

运算符
函数
Dart处理信息的抽象手段

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
在上一篇文章中,我通过一个基本 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Dart是一门面向对象的编程语言,本文介绍了Dart中函数、类和运算符的处理方式。在Dart中,函数也是对象,可以被定义为变量和参数传递给其他函数。文章详细介绍了函数的定义和使用方式,包括箭头函数、可选命名参数和可选参数的使用方法。此外,文章还介绍了Dart中类的定义和初始化方式,包括成员变量、构造函数、初始化列表和命名构造函数的使用。通过具体的代码示例,读者可以了解Dart中函数、类和运算符的基本思路和使用方法。文章内容简洁明了,适合初学者快速了解Dart的基本特点和语法。 在面向对象的编程语言中,复用其他类的变量与方法的方式一般有继承和接口实现。Dart中,你可以对同一个父类进行继承或接口实现。文章详细介绍了继承和接口实现的差别,并介绍了混入的概念,以解决多重继承可能导致的歧义问题。 另外,文章还介绍了Dart中的运算符,包括?.运算符、??= 运算符和??运算符的使用方法。此外,还介绍了自定义运算符的方法,以及运算符覆写的概念。 总的来说,本文通过简洁明了的语言和具体的代码示例,帮助读者快速了解了Dart的基本设计思路和语法特性,使读者具备了快速上手实践的能力。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(34)

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

    作者回复: 厉害了

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

    作者回复: 厉害了

    2019-07-14
    21
  • Qilin 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
    13
  • Geek_869250
    mixin和react有什么不同,react已经不使用了

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

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

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

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

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

    2019-07-14
    3
    4
  • 颜为晨
    可选命名参数是不是可以理解成 map?

    作者回复: 可以

    2019-09-10
    3
  • 加温后的啤酒
    老师,你文中说“子类可以根据需要覆写构造函数及父类方法”,这句话用在大多数编程语言比如java中是对的,但是用在Dart中是不对的吧。Dart构造函数的特点是子类不会继承父类的构造函数,Dart官方文档里也有提到“Subclasses don’t inherit constructors from their superclass”,所以也就谈不上覆写构造函数。老师,我的理解对吗?

    作者回复: “子类可以根据需要覆写构造函数”这里指的是子类可以通过子类自己的构造函数改变父类的变量初始化方式

    2019-12-17
    2
  • sherry慈
    问老师一个问题,可选命名参数可以和必传参数共存吗

    作者回复: 当然可以呀

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

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

    2019-11-13
收起评论
显示
设置
留言
34
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部