Fork me on GitHub

Dart学习笔记 - 变量

默认值

没有初始化的变量自动获取一个默认值为null;

int test;
print(test == null); // true

常量 final & const

final变量只能赋值一次;const变量是编译时常量(const 变量同时也是 final 变量)。顶级的final变量或者是类的final属性在第一次使用的时候初始化。。

注意: 实例变量可以为 final 但不能是 const

const修饰的变量赋值时不能使用非const修饰的变量。

final int num = 1;
// const int res = num + 1; // 异常

const 关键字不仅仅用来定义常量。也可以用来创建不变的值。

var foo = const [];
final bar = const [];
const baz = const [];

foo =[];
// bar = []; // 异常
// baz =[]; //  异常

数据类型

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

  • numbers
  • strings
  • booleans
  • lists(也称为 arrays)
  • maps
  • runes(用于在字符串中表示 Unicode 字符)
  • symbols

Numbers(数值)

Dart 支持两种类型的数字:

int 整数值,其取值通常位于 -2^53 和 2^53 之间。 double 64-bit(双精度)浮点数。

下面是演示字符串和数字互相转换的方法


// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

Strings(字符串)

可以使用单引号或者双引号来创建字符串:

var s1 = "test";
var s2 = 'test \' test';

可以将表达式的值放入字符串中,方法是${expression}。如果表达式是标识符,则可以跳过{}。要获取与对象对应的字符串,Dart调用对象的字符串toString()方法。

var n1 = 123;
var s1 = '$n1';
var s2 = '${n1 + 1}';
print('$s1 - $s2'); // 123 - 124

可以使用 + 号将字符串进行连接,多个字符串放一起可以省略+号。

var s1 = 'a''b';
var s2 = 'c'"b";

可以使用 '''三个引号创建多行字符串对象

var s1 = '''
123
456
''';

\斜杠有转义效果。在字符串前添加r可以让其失效。

var s1 = r'123\n123';
print(s1); // 123\n123

const修饰的字符串使用插值赋值时不能使用非const修饰的变量。

const s1 = 1;
var ns1 = 2;
const res = '$s1';
// const res2 = '$ns1'; // 异常

Booleans(布尔值)

如果变量为非布尔类型,如果直接放在if后面的括号内,则会报错。

var a = "123";
// if (a) print(a); // 异常

List(列表)

下面是一个Dart list 的示例:

var list = [1, 2, 3];
print(list.length); // 3
print(list[0]); // 1

const进行定义一个不变的list对象。

var list = const[1, 2, 3];
// list[1] = 1; // 异常

如果用const进行修饰变量,则列表内的所有值都无法改变。如果用final进行修饰,则可以改变列表内的值,但不能改变变量指向的值。

const List list = [1, 2, 3];
// list[0] = 1; // 异常
final List list2 = [1, 2, 3];
// list2 = [2,3]; // 异常

Maps

Map 是一个键值对相关的对象。键和值可以是任何类型的对象。键不能重复。 下面是一些创建简单map的示例。

var m1 = {1: 2, 2: "a", "a": "1"};
var m2 = new Map();
m2[1] = 2;
m2['a'] = 1;
print(m2[3]); // null
print(m2); // {1: 2, a: 1}
print(m2.length); // 2

Runnes

在 Dart 中,runes 代表字符串的 UTF-32 code points。 Unicode 为每一个字符、标点符号、表情符号等都定义了 一个唯一的数值。 由于 Dart 字符串是 UTF-16 code units 字符序列, 所以在字符串中表达 32-bit Unicode 值就需要 新的语法了。通常使用 \uXXXX 的方式来表示 Unicode code point, 这里的 XXXX 是4个 16 进制的数。 例如,心形符号 (♥) 是 \u2665。 对于非 4 个数值的情况, 把编码值放到大括号中即可。 例如,笑脸 emoji (😆) 是 \u{1f600}。

Symbols

Symbol 用于在 Dart 程序中声明的操作符或者标识符。在避免标识符混杂的时候用。 在标识符前加#号可以获取 Symbol 对象:

var s1 = # a;
var map = {1:2, 'a': 1};
map[s1] = 1;
print(map);