[Flutter新手村]-简单聊聊Dart

682 阅读3分钟

如果Flutter作为UI框架是美丽的躯壳,那么Dart就是美丽躯壳的灵魂。

其实,想入手flutter,不会dart,看不懂代码就tm尴尬了~

Dart语言编程概览已经完全够我们使用了。如果你有其它语言基础,那估计也就需要半天就能熟悉了。

Dart历史

Dart可是想要一统前后端的语言,NodeJs后背是否有点瑟瑟发冷?

  • 2013年11月14日,谷歌发布Dart 1.0版本,其标题为《Dart 1.0: A stable SDK for structured web apps》,目标稳定结构化的web app开发sdk。
  • 2018年8月8日,谷歌发布Dart2.0版本,其标题为《Announcing Dart 2 Stable and the Dart Web Platform》,5年时间优化dart执行效率,发布了2.0和web平台。
  • 2018年12月4日,谷歌发布Flutter 1.0版本,其标题为《Flutter 1.0: Google’s Portable UI Toolkit》,google发布跨平台框架flutter,语言选择Dart,据说是因为两个团队离得近,方便交流哈哈。其实flutter选dart是双赢的结果,dart为flutter提供高性能的vm和定制化修改,flutter为dart提供了大量的使用场景

看一下Dart的历史,可能未来有一天,dart要和js平分前后端主要技术栈了,所以学dart还是很有必要的,至少不会失业吧~

Dart和Java一些对比

万物皆为Object

  • Java中有基本类型变量和引用类型变量,基本类型变量在常量池,引用类型变量在堆上,堆上的变量都是Object的子类。
  • Dart中万物都是Object的子类,包括null,包括方法,所以所有变量默认值都是null。

数字类型

  • Java: int, long, float, double。int a = (int)double可以强转
  • Dart: number, double, number和double不能强转,因为二者都只是Object的子类,用 number a = double.toInt()。

单线程模型Isolate

  • Java中不同线程是共享主内存的,所以当不同线程需要同时修改共享变量的时候就会出现线程安全的问题,困扰着很多java开发者。
  • 所有 Dart 代码都在隔离区( isolates )内运行,而不是线程。 每个隔离区都有自己的内存堆,确保每个隔离区的状态都不会被其他隔离区访问。

Future/Stream 响应式执行异步

  • Future/Stream执行异步,Future返回一个可等待的结果,Stream返回一个流可以,继续操作流。
  • Future很重要,Flutter中执行异步都要用,具体要看文档,这里主要点一下。

闭包

  • Java闭包是伪闭包,通过匿名内部类的方式。匿名内部类访问方法中的变量时,需要变量是final的,这样变量在方法内部和匿名内部类中就是一致的了
  • Dart中方法因为也是Object的子类,所以可以作为参数直接传递。

方法中子方法

  • Java方法中不能定义子方法
  • Dart中可以定义

方法参数中的可选参数

  • kotlin/swift里有类似的特性
  • Dart中可选参数分为“命名可选参数”和“位置可选参数”,需要注意一下调用方式,flutter中声明对象传参数很常见

Mixin 给类添加新的功能

  • 感觉很像java中接口的default方法。子类实现了这个接口,默认也实现了接口中定义的方法实现。

后记

Dart语言很适合快速入门,建议和自己熟悉的语言特性对比着理解记忆。

语言入门了就可以开发Flutter了,对了Dart有一套自己的编程风格,写之前最好简单了解一下,不然到时ide会疯狂波浪形警告的~