文章目录
定位
首先本文是通过对比其他语言(主要是java)快速入门,建议您至少要熟悉一门静态语言或者动态语言。Dart和java以及C#都差不多,基本上不用学习可以直接使用,从这里可以你可以了解Dart有些特别之处。
首先从一段代码入门吧:
void main() {
for (int i = 0; i < 5; i++) {
printTest('hello ${i + 1}');
}
}
void printTest(String variableInteger) {
print(variableInteger);
}
从上面可以看到,Dart语言主入口是main函数
,他可以不用属于某个类。一眼看上去和java差不多。流程控制也是由小括号和大括号构成,不用考虑缩进。结尾必须要加上分号。
声明数据类型
void main() {
int l = 4;
String str1 = "str1";
var i = 1;
dynamic d = 0;
final j = 2;
const k = 3;
}
Dart是强类型语言,变量都会有一个类型。你可以向java那样直接声明类型,同样可以像swift或者Kotlin那样使用类型推导。Dart的类型推导使用final,var,const,dynamic关键字。
var
修饰变量,这个没什么好说的。final
表示不可变的,修饰内置数据类型,值不可变;修饰对象表示引用不可变,使用到的频率很高。const
是编译时常量,他表示始终不可变,无论修饰内置类型还是对象,或者是数据结构。dynamic
是任意类型,有点像java里面的Object
,Kotlin中的Any
。
使用const修饰的都是编译时常量。它区别于运行时,它的值是不可变的。
所有的数据类型,不管是int还是String,初始值都是null
数据类型
numbers、strings和booleans
首先是numbers
,strings
,booleans
其中numbers包括int
和double
类型,分别表示整数和浮点数。strings就是String
类型,普通的字符串。booleans类型是bool
只包含true
和false
。
numbers
* int
* double
strings
* String
booleans
* bool
如下代码:
void main() {
// numbers
int i = 1;
double d = 1.1;
// 字符串转数字
// 这里就使用了类型推导
final p1 = "3";
final p2 = "3.3";
print(int.parse(p1));
print(double.parse(p2));
// string
// 可以使用('xxx')("xxx")('''xxx''') 三种方式初始化字符串,和Kotlin很像。
// 字符串比较的是值
final str1 = "test";
final str2 = "test";
print(str1 == str2); // true
final str3 = 'test';
print(str3);
final str4 = '''test''';
print(str4);
print(str4 == str3); // true
print("I'm ${str4}!!!");
//booleans
// null 可以直接用来判断,它是false
if(null) {
print('null is true');
} else {
print('null is false');
}
print(''.isEmpty);
// final list = [];
// if(!list) {
// print('not empty');
// }
}
Dart的数据结构包括list和map
list
list
对应的就是java里面的List,list可以像Python等语言那样使用[]
进行数组操作,参照以下示例代码。
List有几个在flutter非常常用的初始化方式,分别为filled
和generate
。具体参考:https://api.dartlang.org/stable/2.1.0/dart-core/List-class.html
void main() {
// 初始化
final list1 = [1,2,3,4,5];
// 编译时常量
final list2 = const [2,3,4,5,6];
// list2[2] = 8; error
print(list2);
// 初始化2
List<int> list3 = new List(5);
print(list3); // [null, null, null, null, null]
// 初始化3 filled 第一个参数是个数,第二个是添加的值
List<int> list4 = List.filled(3,10);
print(list4); // [10,10,10]
// 初始化4 类似Python的Map生成
List<int> list5 = List.generate(3,(i) => i * 3);
print(list5); // [0, 3, 6]
// 更改 使用list1
list1[2] = 8;
print(list1); // [1, 2, 8, 4, 5]
// 添加
list1.add(10);
// list1[10] = 20; Index out of range
print(list1); // [1, 2, 8, 4, 5, 10]
//删除
list1.remove(10);
print(list1); // [1, 2, 8, 4, 5]
}
map
map
对应java里面的Map,他的操作方式有点像Python。需要注意的有几点。
- Map的Key不能有重复的
- 如果使用int类型作为key,取值的时候优先使用key匹配,然后是下标。
- 取不到值不会抛异常,直接返回null
- Map和List可以转换为Json,来回转换时深拷贝。