目录
一、变量
1.1 var
1.2 Object
1.3 dynamic
1.4 final与const
二、内置类型
2.1 num(数值)
2.2 Strings(字符串)
2.3 bool(布尔值)
2.4 List(列表)
2.5 Map(映射集合)
2.6 runes(Unicode字符,了解即可)
2.7 Symbols(操作符标识符,了解即可)
Dart语言的内容挺多的,咱不用都学了。就跟Java 一样,学了也不一定用。咱们可以先上手入门,后面再慢慢填充自己的小知识库。
1. 变量和内置类型;
2. 操作符、方法与异常;
3. 类;
4. 异步编程。
搞定这些就可以上手自己的小Demo了,其他的再慢慢填充。今天咱们先学学第一项变量和内置类型。
一、变量
跟其他语言一样main函数是执行入口。
void main(){
//使用单引号和双引号效果是一样的
var scc1 = 'scc';
var scc2 = "scc";
String scc3 = "scc";
Object scc4 = 'scc';
dynamic scc5 = 'scc';
print(scc1==scc2);//true
print(scc2==scc3);//true
print(scc3==scc4);//true
print(scc4==scc5);//true
//变量是一个引用,scc1 - scc5 的变量都引用了 一个内容为 “scc” 的 String 对象。
}
可以用var、Object与dynamic声明的变量赋任何类型的值,但是背后的原理却是非常不同。不用全掌握,了解即可,不影响开发。
1.1 var
声明的变量在赋值的那一刻,决定了它是什么类型。
//var、Object与dynamic
var dart = "scc";//String 类型
//正确使用
dart = "6.20";
print(dart);//6.20
//错误使用,编译不通过
//1.不能将int的值赋值给String
//dart = 1;
//2.或者将int值强转成String
//dart = 1 as String;
1.2 Object
与Java一样Object是所有类的基类,Object声明的变量可以是任意类型。(在 Dart 中 甚至连 数字、方法和 `null` 都是对象,比如int。)
//String类型
Object dart2 = "scc";
print("${dart2.runtimeType} + $dart2");//String + scc
//int类型
dart2 = 1;
print("${dart2.runtimeType} + $dart2");//int + 1
dart2.runtimeType,获取类型
1.3 dynamic
不是在编译时候确定实际类型的, 而是在运行时。dynamic声明的变量行为与Object一样
1.没有初始化的变量自动获取一个默认值为 `null`(类型为数字的 变量如何没有初始化其值也是 null)。
2.在声明变量的时候,也可以选择加上具体 类型:dart3 = "scc";
3.对于局部变量,按照Dart代码风格推荐,使用 `var` 而不是具体的类型来定义局部变量。
//String类型
dynamic dart3 = "scc";
print("${dart3.runtimeType} + $dart3");//String + scc
//int类型
dart3 = 1;
print("${dart3.runtimeType} + $dart3");//int + 1
1.4 final与const
如果不打算改变一个变量,可以使用final和const,它们可以替代任何类型,只能在声明时初始化,且不能改变。
final:运行时常量
const:编译器常量,编译时常量能够让代码运行的更高效。
//初始化为常数值,推荐使用const
final String a = "scc";
const String c = "scc";
final String b;
b = "scc";
//const 必须初始化,以下是错误使用
//const String d;
//d = "scc";
注:类的变量可以为 final 但是不能是 const 。如果 const 变量在类中,需要定义为 static const 静态常量。
定义静态常量
class AppManager {
static const String KEY_LOGIN_USER = "key_login_user";
static const String KEY_LOGNO = "key_logno";
static const String KEY_TOKEN = "key_token";
static const String KEY_UID = "key_uid";
}
二、内置类型
2.1 num(数值)
sealed class num implements Comparable<num> {
}
abstract final class int extends num {
}
abstract final class double extends num {
}
num z = 1;
int x = 2;
double v = 1.5;
2.2 Strings(字符串)
Dart 字符串是 UTF-16 编码的字符序列。 可以使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,字符串中也可以引用变量与表达式。
var name = 'scc';
//如果插入一个简单的标识符,而后面没有紧跟更多的字母数字文本,那么{}应该被省略。
//也可以使用+号拼接
var str1 = "名字 is $name!";//名字 is scc!
var str2 = "名字 is ${name.toUpperCase()}zimu";//名字 is SCCzimu
var str3 = "名字 is "+name.runtimeType.toString()+" 类型";//名字 is String 类型
print(str1);
print(str2);
print(str3);
使用三个单引号或者双引号可以 创建多行字符串对象
//使用三个单引号或者双引号可以 创建多行字符串对象
var s1 = '''
使用三个单引号或者双引号可以
创建多行
字符串对象
''';
print(s1);
var s2 = """使用三个单引号或者双引号可以s2
创建多行s2
字符串对象s2""";
print(s2);
运行效果
2.3 bool(布尔值)
Dart 有一个名字为 bool 的类型,只有两个对象是布尔类型的:true 和 false 。这一点和Java没有太大的区别。
2.4 List(列表)
列表数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。 用 List
表示。
var list = [1, 2, 3];
//Lists 的下标索引从 0 开始,第一个元素的索引是 0. list.length - 1 是最后一个元素的索引
print(list[list.length-1]);//3
//修改元素
list[0] = 2;
print(list.toString());//[2, 2, 3]
List<int> list2 = [3];
list2[0] = 2;
print(list2.toString());//[2]
//在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量)
var list3 = const [1,2,3];
list3.add(2); ///错误,list不可变
2.5 Map(映射集合)
键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次。这个赋值和Java有明显的区别,这个是要注意的。
//导入库
import 'dart:collection';
void main(){
//初始化方法一
Map<String, String> map = HashMap();
map["account"] = "scc";
map["password"] = "123456";
map["password2"] = "123456";
//scc -- 123456 -- 123456
print("${map["account"]} -- ${map["password"]} -- ${map["password"]}");
//初始化方法二
var map2 = {"account":"dart","password":"111111","password2":"111111"};
//dart -- 111111 -- 111111
print("${map2["account"]} -- ${map2["password"]} -- ${map2["password"]}");
}
2.6 runes(Unicode字符,了解即可)
Unicode为世界上所有的书写系统中使用的每个字母,数字和符号定义了唯一的数值。 Dart 字符串是 UTF-16 位代码单元字符序列, 所以在字符串中表达 32位 Unicode 值需要 新的语法。Runes就是UTF-32字符集的string 对象。
表达Unicode代码点的常用方法是\uXXXX,其中XXXX是4位十六进制值。要指定多于或少于4个十六进制数字,需要将值放在大括号中。
2.7 Symbols(操作符标识符,了解即可)
可以看作C中的宏,表示编译时的一个常量。
var i = #A; //常量
void main() {
print(i); //Symbol("A")
switch (i) {
case #A:
print("A"); //A
break;
case #B:
print("B");
break;
}
var b = new Symbol("b");
print(#b == b); //true
}