什么是 dart
刚开始接触我经常打成 drat或者datr,这玩意到底是什么?
这个是 Google 七年前(2011年)发布发布新网页编程语言Dart,是一种基于类编程语言(class-based programming language),在所有浏览器都能够有高性能的运行效率,2011年10月10日Google宣布推出Dart的预览版。其官网地址是:www.dartlang.org,目前已经是Dart2版本了
Google在dartlang.org公布Dart开发工具及源代码示例等内容,同时也提供相关虚拟机平台。
目前Dart有两种方式运行:一是在本地的虚拟机上,二是将Dart代码转成Javascript,直接在Javascript引擎上运行
ECMA已经成立技术委员会TC52展开标准化Dart的工作,同时由于Dart能够被编译成标准的JavaScript,它能够有效地在所有现代浏览器上运行。2014年7月,ECMA的第107次全体大会通过了第一版Dart语言规范。
总结下来就是 dart 是计算机编程语言,是由谷歌公司开发的网络编程语言。就类似常见的 Java、C、Swift一样。并且Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system。
看到这个答案的时候我就是这个表情
本来你只想简单的做个 Android 开发者的,但是你不进步就被社会淘汰,比如现在 Kotlin,weex,react native 加上 Android 本身的生态混乱,各种适配已经让你在风中凌乱,现在又来一个 dart,能给调活路吗?
但是生活不还是得继续吗,学会了dart 到时候又可以拿出去跟小伙伴们吹牛逼了,所以继续学下去。
Dart语言的特性
Flutter 是 Google 推出的移动 UI 框架,野心路人皆知,但是为什么会选择 Dart 呢?
可以参考一下 这篇文章
里面也提到了一部分特性
- Dart 是 AOT(Ahead Of Time)编译的,编译成快速、可预测的本地代码,使 Flutter 几乎都可以使用 Dart 编写。这不仅使 Flutter 变得更快,而且几乎所有的东西(包括所有的小部件)都可以定制。
- Dart 也可以 JIT(Just In Time)编译,开发周期异常快,工作流颠覆常规(包括 Flutter 流行的亚秒级有状态热重载)。
- Dart 可以更轻松地创建以 60fps 运行的流畅动画和转场。Dart 可以在没有锁的情况下进行对象分配和垃圾回收。就像 JavaScript 一样,Dart 避免了抢占式调度和共享内存(因而也不需要锁)。由于 Flutter 应用程序被编译为本地代码,因此它们不需要在领域之间建立缓慢的桥梁(例如,JavaScript 到本地代码)。它的启动速度也快得多。
- Dart 使 Flutter 不需要单独的声明式布局语言,如 JSX 或 XML,或单独的可视化界面构建器,因为 Dart 的声明式编程布局易于阅读和可视化。所有的布局使用一种语言,聚集在一处,Flutter 很容易提供高级工具,使布局更简单。
- 开发人员发现 Dart 特别容易学习,因为它具有静态和动态语言用户都熟悉的特性。
其实说白了就是,可以快速学习(但我不信)、有灵活的 UI、能达到原生的性能、还可以热重载。
听起来很厉害的样子,那不管怎么样还是要学一下的。毕竟Google 早就看 Java 不爽了,说不定 Android 15.0就不打算支持了咋整。虽然你可能不会做 Android 做到那个时候。
Dart 语法
由于你可能是做 Android 的所以应该是对 Java 比较熟悉(即使不是做 Android 的应该对 Java 也比较熟悉的我相信你),只需要注意下面强调的一些语法特性就行,其他的都比较类似,不需要全部都关注,到时候写的时候可以现学现用。
- 方法
printHello({String name}) { print("hello, my name is $name");
}
按着 Java 的这种调用方式会直接运行不起
改成这样就行。
printHello(name:"简简单单敲代码");
printHello({String name}) { print("hello, my name is $name");
}
当然还有不一样的地方,现在方法定义成两个参数,之前那样调用还是可以的。
printHello({String name, String age}) { print("hello, my name is $name ,my age is $age");
}
printHello(name:"简简单单敲代码");
最后再写个例子你就懂了
printHello(name:"简简单单敲代码");
printHello(age:18);
printHello(age:18,name:"简简单单敲代码");
printHello({String name, String age}) {
print("hello, my name is $name ,my age is $age");
}
看看输出很有意思,跟 Java区别还是挺大的。
- 首先入参需要指定参数名
- 传参可以少
- 顺序可以不一致
- 所有函数都返回一个值,如果没有指定返回值,则 默认把语句 return null; 作为函数的最后一个语句执行。
- 可以把方法当做参数调用另一个方法(羡慕 swift 很久了,也被 iOS 同学鄙视很久了)。
- 方法也可以赋值给一个变量
- 比Java爽
是不是就可以不需要方法重载了?
- 在Dart的构造中可以没有方法体
- 关键字
- public、private、protected 没有了
- 如果一个标识符以 (_) 开头,则该标识符 在库内是私有的,
- 可以不使用new关键字创建对象
- Dart中变量初始值为null,即使是int类型也是null。
- 基本类型
- 没有float
- int和double是num的子类
- String也可以使用单引号
- Dart需要一个布尔值的时候,只有true对象才被认为true,其他都是false。
- 操作符
这个比较多随便举几个例子
is
和is!
当对象是相应类型时返回true
/false
??=
操作符,如果前操作数是null
类型,则将后操作数赋值给前操作数;如果前操作数不等于```null``,则保持前操作数的值发生变化。- 使用
??
表达式。
expr1 ?? expr2
如果expr1的值为non-null,则返回结果为expr1;反之则返回expr2。..
级联操作符(额。。。)可以连续的操作同一对象,达到减少中间变量,减少代码的目的。
好像很厉害的样子。
当然还有很多自己看文档吧。