因为Futter应用程序使用的编程语言是Dart,所以还是要先了解Dart这门语言的一些基础知识的。
目前为止网络上已经很多Dart的资料,我就不从0开始详细解释语法了,而是挑一些比较关键的点,做一下简单的梳理。
基本概念
Dart中所有变量皆为对象,不像OC在使用基本类型时候不带指针和java的int与它包装类Integer一样。
在Dart中,所有对象初始值都为null,他们继承自Object。
使用固定的num可以明确代码中的数据表示的是数字类型,但这不是强制性的,如果你不确定你将要使用什么类型的数据,可以使用特殊的dynamic来表示当前的类型。
Dart支持在类中定义方法,类中的方法可以是静态方法,也可以是实例方法。更厉害的是你还能在方法中来定义方法(是的你没看错)。
同样,Dart支持静态变量和实例变量。
Dart没有类java的权限修饰符(public、protected、private),但有一个_的标识符,如果以这个标识符开头,代表这个标识符在当前类中是私有的,这点有点类似OC的-和+。
关键字
所有语言都有关键字,Dart也不例外。
内置关键字
- abstract
- as
- deferred
- operator
- typedef
- dynamic
- get
- implements
- set
- export
- import
- static
- external
- factory
- library
Dart 2.0新增关键字
- async
- async*
- await
- yield
- sync*
- yield*
保留字
- continue
- false
- new
- this
- default
- final
- null
- throw
- assert
- finally
- true
- do
- for
- try
- rethrow
- else
- if
- return
- var
- break
- enum
- void
- case
- while
- catch
- in
- super
- with
- class
- extends
- is
- switch
- const
变量与类型
变量的定义
下面定义一个name的变量并赋值为Kevin:
var name = 'Kevin';
具体类型变量的定义
下面定义一个类型为int的变量并赋值为24:
int age = 24;
需要注意的是,dart所有变量皆为对象,如果定义int型变量不赋予默认值,则此时该int型变量的值也是null,而不是0。
下面定义一个类型为String的变量:
String name = 'Kevin';
final变量和const常量
与java一样,final修饰符修饰的变量只能赋值一次,下面定义一个final不指定类型的变量name1和指定类型的变量name2:
final name1 = 'Kevin';
final String name2 = 'Moly';
而const变量是一个编译时的常量,如果const变量在类里面,则需要定义为static const,以下为定义const变量的方式:
const width = 1000;
const height = 1000 * width;
数据类型
Dart 内置支持下面这些类型:
- numbers
- strings
- runes (用在字符串中表示 Unicode 字符)
- booleans
- lists
- maps
- symbols
下面篇幅中将对这些类型进行解释。
Numbers数值型
Dart中有两种类型的数值,分别是int和double,分别代表整数和浮点数。
int
int的取值范围不大于64位,这跟平台有关,一般来说理解为位于到之间。
double
64位的双精度浮点型数据。
在Dart里面如果定义一个变量的值为整数,则为int,如果值为小数(带小数点),则为double:
var x = 1;//当做int处理
var y = 2.0;//当做double处理
Strings字符串
Dart字符串String是UTF-16的编码序列,可以使用单引号或者双引号来表示字符串:
var str1 = 'Hello';
var str2 = "World";
而字符串的连接符也跟大多语言一致,为+:
var str1 = 'Hello';
var str2 = "World";
var str3 = str1 + str2;
通过三个单引号或者双引号可以创建多行字符串:
var strMultiLine = '''
This is a Flutter demo,
this is the second line.
''';
通过r前缀可以创建一个原始字符串:
var strRaw = r'This is a Flutter demo, \nthis is the second line.';
Runer字符串
前面提到的字符串String是UTF-16的编码序列,而当要表达32位的Unicode值时就需要使用runes了。
如下面的定义里面,dart将会把变量smile当做runes来处理:
var smile = '\u{1f600}';
Booleans布尔值
Dart提供一个bool类型的变量表示布尔型,这个变量有true和false两个值可以表示。
需要注意的是,在Dart里面,需要一个布尔值的时候,只有明确他是true才会为true,否则都是false。
Lists列表
也就是常说的集合,Dart中数组就是List对象。
下面是一个声明list变量的代码示例:
vat list1 = [1,2,3,4,5];
与大多数语言一致,Lists的下表索引从0开始,最后一个元素是list.length - 1。
Maps键值对
Map是一个键值对对象类型,每个键只允许出现一次,而一个值可以出现多次。
var demoMaps = {
'key1' : 'value1',
'key2' : 'value2',
'key3' : 'value3'
};
也可以通过构造方法实现同样的功能:
var demoMaps = new Map();
demoMaps['key1'] = 'value1';
demoMaps['key2'] = 'value2';
demoMaps['key3'] = 'value3';
Symbols字面量
Symbol字面量定义的是编译时的常量,在使用了代码混淆后,标识符的名字会被混淆,但Symbol的名字不会改变,这个时候可以通过Symbol字面量来获取标识符的symbol对象。
本文摘抄自KevinWu的博客