Dart的设计目标应该是既对标Java,也对标JavaScript,Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。除了融合Java和JavaScript语言之所长之外,Dart也具有一些其它具有表现力的语法,如可选命名参数、..(级联运算符)和?.(条件成员访问运算符)以及??(判空赋值运算符)。
在Dart中其实看到的不仅有Java和JavaScript的影子,它还具有其它编程语言中的身影,如命名参数在Objective-C和Swift中早就很普遍,因此我们可以看到Google对Dart语言给予厚望,是想把Dart打造成一门集百家之所长的编程语言。
1.变量声明
(1)var
有点像JavaScript中的var,可以接收任何类型的值,但一赋值,类型便会确定,不能再改变其类型。Dart是一个强类型语言,而JavaScript是纯粹的弱类型脚本语言。
(2)dynamic和Object
Dynamic和Object 与 var功能相似,都会在赋值时自动进行类型推断,不同在于,赋值后可以改变其类型。
(3)final和const
如果您从未打算更改一个变量,那么使用 final 或 const。 一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量,final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略。
2.函数
Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function。这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征。
(1)函数声明
dart函数声明如果没有显示申明返回值类型时会默认当做dynamic处理,注意,函数返回值没有类型推断。
(2)对于只包含一个表达式的函数,可以使用简写语法。也就是箭头函数
(3)函数作为变量
(4)函数作为参数传递
(5)可选的位置参数
包装一组函数参数,用[]标记为可选的位置参数
(6)可选的命名参数
定义函数时,使用{param1, param2, …},用于指定命名参数。调用函数时,可以使用指定命名参数。可选命名参数在Flutter中使用非常多。