Dart语言入门学习-内建类型(二)

在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.";

在这里插入图片描述
我们看到会报上面的错误,如果字符串需要换行怎么办呢,我们可以使用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
posted @ 2019-05-14 14:47  数据结构和算法  阅读(77)  评论(0编辑  收藏  举报