目录
有哪些类型
常量:const final
变量:var
布尔类型:bool
数值型:num : int & double
字符串:String
列表:list
键值对:map
常量
int testSum() {
return 10;
}
// 编译时需要确定常量的值,一旦确定便不能更改
// const int a = testSum();
// int 可以省略,dart会自动推断类型
const a = 10;
// final 是运行时确定常量的值,一旦确定便不能更改
final b = testSum();
// a = 10, b = 10
debugPrint('a = $a, b = $b');
变量
//var声明一个变量
var a = 10;
//变量可以再次赋值
a = 20;
//再次赋值时不能改变类型
// a = 'hello';
// a = 20
debugPrint('a = $a');
布尔
bool isTure = true;
// isTure = true
debugPrint('isTure = $isTure');
//会自动判断类型
var isRight = false;
//查看类型
// type = bool
debugPrint("type = ${isRight.runtimeType}");
//是否是某个类型
// isbl = true
debugPrint("isbl = ${isRight is bool}");
数值
num a = 10;
debugPrint("${a.runtimeType}");//int
debugPrint("${a is int},${a is num}");//true,true
int b = 10;
debugPrint("${b.runtimeType}");//int
debugPrint("${b is int},${b is num}");//true,true
double c = 10;
debugPrint("${c.runtimeType}");//double
debugPrint("${c is double}, ${c is num}, ${c is int}");//true, true, false
字符串
String a = 'hello';
String b = 'flutter';
var c = a + b;
debugPrint('c = $c');// c = helloflutter
debugPrint("${c.runtimeType}");// String
debugPrint(c[1]);// e
list
//不可变类型
List consta = const [1, 2, 3];
debugPrint("${consta.runtimeType}");// List<dynamic>
// 可变类型
List a = [1, 2, 3];
debugPrint("${a.runtimeType}");// List<dynamic>
debugPrint("${a[1].runtimeType}");// int
//增
a.add(4);
debugPrint('$a');// [1, 2, 3, 4]
//删
a.removeAt(0);
debugPrint('$a');// [2, 3, 4]
//改
a.insert(2, 100);
debugPrint('$a');// [2, 3, 100, 4]
//前闭后开
var suba = a.sublist(1, 3);
debugPrint('$suba');// [3, 100]
//value:当前聚合值,element:列表中的一个元素;
var b = [1, 2, 3];
var reduce = b.reduce((value, element) {
debugPrint('value is $value, element is $element');
return value + element;
});
debugPrint('reduce = $reduce');
// flutter: value is 1, element is 2
// flutter: value is 3, element is 3
// flutter: reduce = 6
//map
var map = b.map((e) {
return e * 3;
});
debugPrint('map = $map');// map = (3, 6, 9)
map
//不可变map
var consta = const {'one': 'hank', 'two': 'tom'};
debugPrint("${consta.runtimeType}");// _ConstMap<String, String>
var a = {'one': 'hank', 'two': 10};
debugPrint("${a.runtimeType}");// _Map<String, Object>
Map b = {'one': 'hank', 'two': 'tom'};
debugPrint("${b.runtimeType}");// _Map<dynamic, dynamic>
operator
// 赋值运算 ??=
// 条件表达式 ??
var a ;
debugPrint('a = $a');// a = null
debugPrint("${a.runtimeType}"); //Null
//a 为 null 的时候才会赋值
a ??= 5;
//a 不为 null 的时候直接返回
a ??= 10;
debugPrint('a = $a');// a = 5
var b = 1;
var c = b ?? a; // b 不为null 就返回b, b为null就返回a
debugPrint('c = $c');// c = 1
debugPrint("${c.runtimeType}");//int
函数
正常书写
int sum(int a, int b) {
return a + b;
}
debugPrint('sum = ${sum(10, 20)}');
参数类型可以省略
int sum2(a, b) {
return a + b;
}
debugPrint('sum2 = ${sum2(10, 20)}');
返回值类型可以省略
sum3(a, b) {
return a + b;
}
debugPrint('sum3 = ${sum3(10, 20)}');
函数体只有一行时可以使用箭头
sum4(a, b) => a + b;
debugPrint('sum4 = ${sum4(10, 20)}');
可选命名参数
int sum5(a, b, {c}) {
if (c != null) {
return a + b + c;
} else {
return a + b;
}
}
debugPrint('sum5 = ${sum5(10, 20)}');
debugPrint('sum5 = ${sum5(10, 20, c: 30)}');
可选命名参数的默认值
int sum6(a, b, {c = 0}) {
return a + b + c;
}
debugPrint('sum6 = ${sum6(10, 20)}');
匿名函数
var func = (a, b) { return a + b;};
var func1 = (a, b) => a + b;
debugPrint('sum7 = ${func(10, 20)}');
立即执行函数
var sum8 = ((a, b) {
return a + b;
})(10, 20);
debugPrint('sum8 = $sum8');
闭包
Function getConter() {
var count = 0;
int counter() {
count++;
return count;
}
return counter;
}
var counter = getConter();
var result = counter();
debugPrint('result = $result');//result = 1
result = counter();
debugPrint('result = $result');//result = 2
行者常至,为者常成!