在dart语言中所有的变量都是一个对象(一个类的实例),所以我们也可以使用构造函数来初始化变量,一些构建类型有自己的构造函数,比如你可以使用map构造函数来创建一个map。

Numbers

dart的numbers类型有2种,一种是int,一种是double。不像java有那么多。numbers类型包括基本运算 +, -, /, 和 *, 以及 abs(), ceil(), 和 floor()等函数。(按位运算符,例如»,定义在 int 类中。) 如果 numbers找不到你想要的方法, 可以使用 dart:math 库。
number类型和String类型之间的转化

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

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

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

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);//结果为3.14

int类型和其他语言的int类型也都差不多,像一般的移位,与或都可以运算,如果我们想把它定义为一个常量,直接在前面加const就行,比如

const msPerSecond = 1000;

dart会自动推断msPerSecond 为int类型

Strings

字符串可以通过单引号或双引号来创建,字符串可以通过 ${expression} 的方式内嵌表达式。 如果表达式是一个标识符,则 {} 可以省略。比如

void main() {
var s = 'string interpolation';
print('Dart has $s ,lol');
print('Dart has ${s.toUpperCase()} ,lol');
}

运行结果为

Dart has string interpolation ,lol
Dart has STRING INTERPOLATION ,lol

==用来测试两个对象是否相等,+可以将多个字符串连接起来。如果字符串换行就会报错,比如

var s2 = "This is also a
multi-line string.";

Dart语言入门学习-内建类型(二)_dart
我们看到会报上面的错误,如果字符串需要换行怎么办呢,我们可以使用3个单引号,或3个双引号

void main() {
var s1 = '''
You can create
multi-line strings like this one.
''';

var s2 = """
This is also a
multi-line string.""";

print(s1);
print(s2);
}

运行结果为

You can create
multi-line strings like this one.

This is also a
multi-line string.

如果我们的字符串中有换行符,显示的时候会换行,如果我们不想让他换行,只需要在字符串前面加r就行了

var s3 = r"In a raw string, even \n isn't special.";

运行的结果为

In a raw string, even \n isn't special.

Booleans

boolean类型只有true和false,这个和其他语言类似,比较简单

// 检查空字符串。
var fullName = '';
print(fullName.isEmpty);

// 检查 0 值。
var hitPoints = 0;
print(hitPoints <= 0);

// 检查 null 值。
var unicorn;
print(unicorn == null);

// 检查 NaN 。
var iMeantToDoThis = 0 / 0;
print(iMeantToDoThis.isNaN);

运行结果

true
true
true
true

Lists

在dart中arrays也就是list,

var list = [1, 2, 3];

Dart 可以list 的类型为 List 。 如果尝试将非整数对象添加到此 List 中, 则会报错。
这个和其他语言一样,下标也是从0开始

void main() {
var list = [1, 2, 3];
print(list.length);
print(list[1]);

list[1] = 1;
print(list[1]);
}

运行结果为

3
2
1

如果加上const关键字,就变成了常量,就不能再改变了,

var  constantList = const [1, 2, 3];
constantList[1] = 1; // 会引起错误。

Sets

set是一个元素唯一且无序的集合,他是用的是{},和list不一样,list使用的是[],

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

Dart 会推断 halogens 类型为 Set ,如果创建一个空的set

var names = <String>{};
// Set<String> names = {}; // 这样也是可以的。
// var names = {}; // 这样会创建一个 Map ,不是 Set 。

add() 和 addAll() 为已有Set添加元素,.length 来获取 Set 中元素的个数,如果在字面量的前面添加const,表示是常量不能被改变

final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
constantSet.add('helium'); // 这里会报错

Maps

map是以键值对的形式存在,在map中key不能重复,但value可以重复。map的初始化有下面几种方式

void main() {

var gifts1 = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};

var gifts2 = Map();
//var gifts2 = new Map();,这里可以使用new,也可以不使用
gifts2['first'] = 'partridge';//添加元素
gifts2['second'] = 'turtledoves';//添加元素
gifts2['fifth'] = 'golden rings';//添加元素

var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

print(gifts1['aaa']); //查找的时候如果找不到就会返回null
print(gifts1['first']);
print(gifts1.length); //获取map的长度

}

看一下运行结果

null
partridge
3

Runes

Rune 用来表示字符串中的 UTF-32 编码字符,它可以通过文字转换成符号表情或者代表特定的文字。String 类有一些属性可以获得 rune 数据。 属性 codeUnitAt 和 codeUnit 返回16位编码数据。 属性 runes 获取字符串中的 Rune 。

main() {
var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());

Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
}

运行结果为

?
[55357, 56399]
[128079]
♥ ? ? ? ? ?

Symbols

Symbols一般使用的不是很多,在反射中用的比较多,特别是很多发布包都是混淆后的,代码混淆后会改变标识符的名称,但不会改变标识符的符号,通过字面量 Symbol ,也就是标识符前面添加一个 # 号,来获取标识符的 Symbol 。

#radix
#bar