声明可以有两种方式,一种是不指定类型,即使用var关键字
var name=’test’;
另一种是明确指定类型(Optional types)
string name=’test’;
在变量类型并不明确的情况下,可以使用dynamic关键字 如:dynamic name = 'Bob';
未初始化的变量默认值是 null
Final 和 Const
使用过程中从来不会被修改的变量, 可以使用 final 或 const,而不是 var 或者其他类型,Final 变量的值只能被设置一次; Const 变量在编译时就已经固定 (Const 变量 是隐式 Final 的类型) 。最高级 final 变量或类变量在第一次使用时被初始化。
内建类型
// String -> int 文字转成int
var one = int.parse('1');
assert(one == 1);
// String -> double 字符串转双精度
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String int转成字符串
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String 双精度转字符串并保留2位小数点
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
Dart 的类型安全意味着不能使用 if (nonbooleanValue) 或者 assert (nonbooleanValue)。 而是应该像下面这样,明确的进行值检查:
// 检查空字符串。
var fullName = '';
assert(fullName.isEmpty);
// 检查 0 值。
var hitPoints = 0;
assert(hitPoints <= 0);
// 检查 null 值。
var unicorn;
assert(unicorn == null);
// 检查 NaN 。
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
是 Set 还是 Map
在 Dart 中 Set 是一个元素唯一且无序的集合。 Dart 为 Set 提供了 Set 字面量和 Set 类型。
01==》 Set 它的主要功能是去除重复的数组内容;
Set是没有顺序且不能够重复的数组,所以不能够通过索引值去获取内容
var s = new Set();
s.add('苹果x');
s.add('苹果x');
print(s); //{苹果x}
// 将其他的类型转化为数组内容
print(s.toList());//[苹果x]
02===》数组去重
main() {
var Arr = ['苹果x', '苹果xr', '苹果11', '苹果12', '苹果13'];
var s = new Set();
s.add('苹果13');
s.addAll(Arr);
print(s.toList()); //[苹果13, 苹果x, 苹果xr, 苹果11, 苹果12]
}
//详细属性:https://blog.csdn.net/syx_1990/article/details/117854685
Map 是用来关联 keys 和 values 的对象。 keys 和 values 可以是任何类型的对象。在一个 Map 对象中一个 key 只能出现一次。 但是 value 可以出现多次。 Dart 中 Map 通过 Map 字面量 和 Map 类型来实现。
下面是使用 Map 字面量的两个简单例子:
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
详细参数:https://www.jianshu.com/p/0c9c0e6a5635
Rune
在 Dart 中, Rune 用来表示字符串中的 UTF-32 编码字符。
Unicode 定义了一个全球的书写系统编码, 系统中使用的所有字母,数字和符号都对应唯一的数值编码。 由于 Dart 字符串是一系列 UTF-16 编码单元, 因此要在字符串中表示32位 Unicode 值需要特殊语法支持。
表示 Unicode 编码的常用方法是, \uXXXX, 这里 XXXX 是一个4位的16进制数。 例如,心形符号 (♥) 是 \u2665。 对于特殊的非 4 个数值的情况, 把编码值放到大括号中即可。 例如,emoji 的笑脸 (�) 是 \u{1f600}。
String 类有一些属性可以获得 rune 数据。 属性 codeUnitAt 和 codeUnit 返回16位编码数据。 属性 runes 获取字符串中的 Rune 。
下面是示例演示了 Rune 、 16-bit code units、 和 32-bit code points 之间的关系。
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));
}