在学习 Flutter 之前先学习 Dart
鉴于针对移动领域的技术创新“淘金热”,得益于 Flutter、React Native、NativeScript、PhoneGap 等跨平台解决方案,开发应用程序从未如此简单。
Flutter 尤其成功吸引了开发者社区的关注,它以其富有表现力的风格,让构建移动应用的 UI 变得轻松愉悦。它融合了现代开发经验中常见的一些概念,例如响应式编程和 Widget 组合,并以 Dart 平台作为其主要运行基础。
喜欢视频吗?
那么,Dart 是什么?
Dart 是 Google 推出的一门面向对象编程语言,旨在帮助开发者构建现代 Web 应用程序。它涵盖客户端、服务器端,现在还支持 Flutter 的移动端。它配备了一系列工具,包括虚拟机、核心库和包管理仓库,为您的下一个项目提供充足的资源。
尽管 Flutter 越来越受欢迎,但它很容易掩盖 Dart 平台的魅力以及它所提供的功能(独立于 Flutter)。
本文将探讨如何编写 Dart 程序,并探索其部分语言特性。希望本文能为您提供一个概览,帮助您在开发下一个应用时充分领略 Dart 的魅力。
第一步
以下是 Dart 程序的示例:
class Order { | |
var _id; | |
var _reference; | |
var _date; | |
Order(id, reference, date) { | |
this._id = id; | |
this._reference = reference; | |
this._date = date; | |
} | |
getInfo() { | |
return 'Your order information:' + | |
'\n-------------------------------' + | |
'\n Id: $_id' + | |
'\n Reference: $_reference' + | |
'\n Date: $_date' + | |
'\n-------------------------------'; | |
} | |
} | |
void main() { | |
var order1 = new Order(1, 'ref1', new DateTime.now()); | |
print(order1.getInfo()); | |
// Expected output | |
// Your order information: | |
// ------------------------------- | |
// Id: 1 | |
// Reference: ref1 | |
// Date: 2018-04-21 19:06:20.507 | |
// ------------------------------- | |
} |
这演示了带有属性和方法的订单蓝图。main()
顶层函数是你引导 Dart 应用程序的地方。
在这里,我希望您能够开始看到该语法与其他 OO 语言非常相似,并且如果您使用 Java、C# 甚至 JavaScript( ES2015 及以上版本)进行编程,您会感到非常熟悉。
话虽如此,Dart 本身也有一些语言特性,肯定能让你作为开发者更高效。看看我们之前课程的这个调整:
这里做的不多,但是我们现在有一个简写构造函数,可以节省重新分配传递给类属性的参数的重复。
我们还通过从方法中移除加号 (+)来使用相邻的getIntro
字符串。哦,对了,在类属性前加上下划线 (_) 可以使它们成为私有的。这很符合惯例,省去了输入 private 关键字的麻烦。
好的,让我们看看我们能走多远。我们的构造函数参数是以位置方式定义的。这意味着它们是必需的。Dart 允许我们定义可选参数,有两种形式:可选位置参数和可选命名参数。这实际上使我们在定义和使用它们的方式上拥有更好的灵活性:
Order(this._id, this._reference, [date]); // optional positional
Order(this._id, this._reference, {date}); // optional named
及其用法:
new Order(1, 'ref1', new DateTime.now()); // optional positional
new Order(2, 'ref2', date: new DateTime.now()); // optional named
当然,我们可以将其映射到我们的内部属性上,尽管对于可选的命名参数,该属性需要是公共的:
Order(this._id, this._reference, [this.date]); // optional positional
Order(this._id, this._reference, {this.date}); // optional named
我希望到目前为止看起来还算可以预料到。现在让我们在属性上强制执行一些类型信息:
int _id;
String _reference;
DateTime _date;
面向对象语言的另一个常见特性是可以多次声明构造函数,并通过传入的参数数量进行区分。Dart 则提供了命名构造函数,这实际上允许你为构造函数添加命名空间,从而免去了对参数数量的担忧:
Order(this._id, this._reference, [this.date]); // normal
Order.withDiscount(this._id, this._reference, this.code); // named
我们将像这样实例化它:new Order.withDiscount(...)
让我们看看到目前为止的重构:
最后一个我想介绍的特性是方法级联。它允许你使用链式调用模式来处理 getter 和 setter,这种模式在 JavaScript 库 jQuery 中很流行。为了演示这一点,我们将另一个名为 的公共属性bookings
:
int _id;
String _reference;
DateTime _date;
String code;
List<String> bookings;
当我们实例化我们的对象时,我们会这样做:
Order order1 = new Order.withDiscount(1, 'ref1', 'WEEKENDFTW1')
..code = 'WEEKENDFTW1'
..bookings = ['booking1', 'booking2', 'booking3'];
双句点(..) 展示了级联的运作方式,每次都会返回实例。链式调用适用于 setter 以及方法调用。
这是一个完整的解决方案:
结论
感谢您阅读到最后。学习这些 Dart 概念将在您开始构建 Flutter 应用程序时助您一臂之力,所以这并不会让您感到意外。
首先,不妨尝试修改一下打印输出,添加其他订单信息。完整的示例可以通过在线 Dart 编辑器轻松访问。
进一步阅读
分享就是关爱🤗
如果您喜欢这篇文章,请通过各种社交媒体渠道分享。此外,欢迎关注我的 YouTube 频道(点击小铃铛图标),观看 Dart 相关视频。
订阅我的电子邮件通讯即可下载我的免费 35 页《开始使用 Dart》电子书,并在发布新内容时收到通知。
喜欢、分享并关注我😍以获取有关 Dart 的更多内容。
文章来源:https://dev.to/creativ_bracket/learn-dart-before-you-flutter-2997