Flutter基础:Dart编程语言——基本概念及变量类型

因为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

1
var name = 'Kevin';

具体类型变量的定义

下面定义一个类型为int的变量并赋值为24:

1
int age = 24;

需要注意的是,dart所有变量皆为对象,如果定义int型变量不赋予默认值,则此时该int型变量的值也是null,而不是0。

下面定义一个类型为String的变量:

1
String name = 'Kevin';

final变量和const常量

与java一样,final修饰符修饰的变量只能赋值一次,下面定义一个final不指定类型的变量name1和指定类型的变量name2:

1
2
final name1 = 'Kevin';
final String name2 = 'Moly';

而const变量是一个编译时的常量,如果const变量在类里面,则需要定义为static const,以下为定义const变量的方式:

1
2
const width = 1000;
const height = 1000 * width;

数据类型

Dart 内置支持下面这些类型:

  • numbers
  • strings
  • runes (用在字符串中表示 Unicode 字符)
  • booleans
  • lists
  • maps
  • symbols

下面篇幅中将对这些类型进行解释。

Numbers数值型

Dart中有两种类型的数值,分别是intdouble,分别代表整数和浮点数。

int

int的取值范围不大于64位,这跟平台有关,一般来说理解为位于$-2^{53}$到$2^{53}$之间。

double

64位的双精度浮点型数据。

在Dart里面如果定义一个变量的值为整数,则为int,如果值为小数(带小数点),则为double:

1
2
var x = 1;//当做int处理
var y = 2.0;//当做double处理

Strings字符串

Dart字符串String是UTF-16的编码序列,可以使用单引号或者双引号来表示字符串:

1
2
var str1 = 'Hello';
var str2 = "World";

而字符串的连接符也跟大多语言一致,为+

1
2
3
var str1 = 'Hello';
var str2 = "World";
var str3 = str1 + str2;

通过三个单引号或者双引号可以创建多行字符串:

1
2
3
4
var strMultiLine = '''
This is a Flutter demo,
this is the second line.
''';

通过r前缀可以创建一个原始字符串:

1
var strRaw = 'This is a Flutter demo, \nthis is the second line.';

Runer字符串

前面提到的字符串String是UTF-16的编码序列,而当要表达32位的Unicode值时就需要使用runes了。

如下面的定义里面,dart将会把变量smile当做runes来处理:

1
var smile = '\u{1f600}';

Booleans布尔值

Dart提供一个bool类型的变量表示布尔型,这个变量有truefalse两个值可以表示。

需要注意的是,在Dart里面,需要一个布尔值的时候,只有明确他是true才会为true,否则都是false。

Lists列表

也就是常说的集合,Dart中数组就是List对象。
下面是一个声明list变量的代码示例:

1
vat list1 = [1,2,3,4,5];

与大多数语言一致,Lists的下表索引从0开始,最后一个元素是list.length - 1

Maps键值对

Map是一个键值对对象类型,每个键只允许出现一次,而一个值可以出现多次。

1
2
3
4
5
var demoMaps = {
'key1' : 'value1',
'key2' : 'value2',
'key3' : 'value3'
};

也可以通过构造方法实现同样的功能:

1
2
3
4
var demoMaps = new Map();
demoMaps['key1'] = 'value1';
demoMaps['key2'] = 'value2';
demoMaps['key3'] = 'value3';

Symbols字面量

Symbol字面量定义的是编译时的常量,在使用了代码混淆后,标识符的名字会被混淆,但Symbol的名字不会改变,这个时候可以通过Symbol字面量来获取标识符的symbol对象。

文章作者: Kevin Wu
文章链接: https://kevinwu.cn/p/cd688b92/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KevinWu.CN
支付宝打赏