人生之路在于不断学习,今天便来讲讲dart的基础知识。
Dart的类型很少,很容易掌握。
仅有两种类型,int和double。
其中int的范围是-2的63次幂到2的63次幂 - 1。
double为64位符合IEEE 754标准。
int例子如下:
int x = 1;
int hex = 0xDEADBEEF;
//也可以使用类型推断
var y = 2;
double例子如下:
double k = 3.2;
var y = 1.1;
var exponents = 1.42e5;
//Dart 2.1之后,这也是合法的
double xx = 1;
assert为Dart中的断言,在debug中如果断言表达式为false,会跑出异常并终止运行,在生产环境则不起作用。
// 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');
以下常量声明均为合法
const x = 1;
const y = 2*x;
const z = y*x;
位运算(int类型才有)
assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111
在Dart中,字符串为UTF-16,单引号和双引号并无明显区别,如果是字符串嵌套,建议使用双引号中嵌入单引号的方式。
var s1 = '单引号是ok的';
var s2 = "双引号也是ok的";
var s3 = '可以这么表达:It\'s ';
var s4 = "也可以用双引号嵌单引号的形式表达:It's";
可以使${表达式}
或$变量
来拼接字符串,当然了,也可以使用java中的+方式。
var s = 'string interpolation';
assert('Dart has $s, which is very handy.' ==
'Dart has string interpolation, ' +
'which is very handy.');
assert('That deserves all caps. ' +
'${s.toUpperCase()} is very handy!' ==
'That deserves all caps. ' +
'STRING INTERPOLATION is very handy!');
在Dart中,==用来判断两个对象是否相等,对于String来说,两个字符串的字符相同,即为相等。
一行字符串的表达,可以使用分行的形式
String s = '一行'
'字符串'
"。";
//输出:一行字符串。
多行字符串可以使用如下表达
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
保留字符串源格式,仅需在字符串前加入前缀r
即可
var s = r'可以正常输出换行符 \n';
字符串常量需要每部分均为常量。
const a = "合法";
var b = 2;
//const b = "不合法$b";
const c = "合法$a";
表现于java基本一致,为了安全,需要显示的指出判断值为布尔
// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);
// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);
// Check for null.
var unicorn;
assert(unicorn == null);
// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
在Dart中,List的表现非常像JavaScript中的数组
var list = [1, 2, 3];
如下声明也是可以的
List list = ["1a","2b"];
创建不可更改内容的List如下:
var constantList = const [1, 2, 3];
// constantList[1] = 1; // 错误,不可更改
constantList = [4,5];//正确
Dart 2.3引入了扩展运算符(…)和空值感知扩展运算符(…?),它提供了一种将多个元素插入集合的简洁方法。
例如,可以使用扩展运算符(…)将列表的所有元素插入另一个列表:
var list = [1, 2, 3];
var list2 = [0, ...list];//[0, 1, 2, 3]
assert(list2.length == 4);
如果扩展运算符右侧的表达式可能为null,则可以通过使用支持null的扩展运算符(…?)来避免异常:
var list;
var list2 = [0, ...?list];//[0]
assert(list2.length == 1);
在Dart2.3中,也可以使用if或者for来构建列表
使用if的例子:
var nav = [
'Home',
'Furniture',
'Plants',
if (1 == 1) 'Outlet'
];
使用for的例子
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
set是一组无序的,无重复的集合。使用{}
来声明set。
Set a = {"1","1"};//仅会有一个1
声明一个空set
var names = {};
// Set names = {}; // 等价于上行
// var names = {}; // 会创建一个Map,而不是set
创建不可更改的set
final constantSet = const {
'fluorine',
'chlorine',
'bromine',
'iodine',
'astatine',
};
// constantSet.add('helium'); // 错误,无法添加
map的使用几乎和java一致。
下面的例子创建了map
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
也可以使用这种方式
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
检索map则于JavaScript一致
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
创建常量map
final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
在Dart中,符文是字符串的UTF-32代码点。
Unicode为世界上所有书写系统中使用的每个字母,数字和符号定义唯一的数值。 由于Dart字符串是UTF-16代码单元的序列,因此在字符串中表示32位Unicode值需要特殊语法。
表达Unicode代码点的常用方法是\ uXXXX,其中XXXX是4位十六进制值。 例如,心脏角色(♥)是\ u2665。 要指定多于或少于4个十六进制数字,请将值放在大括号中。 例如,笑的表情符号(?)是\ u {1f600}。
String类有几个属性可用于提取符文信息。 codeUnitAt和codeUnit属性返回16位代码单元。 使用runes属性获取字符串的符文。
以下示例说明了符文,16位代码单元和32位代码点之间的关系。
Symbol对象表示Dart程序中声明的运算符或标识符。 您可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。
要获取标识符的符号,请使用符号文字,它只是#后跟标识符:
#radix
#bar