数据类型
-
基类是num
-
数值型的操作
运算符: +、 - 、* 、/ 、 ~/ 、 %
- / 除法 整数+余数
- ~/ 除法 取整
- % 取余
常用属性: isNaN、isEven、isOdd (是否非数字、奇偶)
常用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()
- double nan = 0.0 / 0.0;
nan -> not a number 只有这种情况才是非数字
- abs 绝对值
- round 最接近的整数 Returns the integer closest to
this
. - floor 不比它大的整数 Returns the greatest integer no greater than
this
. - ceil 不比它小的整数 Returns the least integer no smaller than
this
.
string 字符串
String a = '''asdfasdf
==asdfasdf''';
String b = 'aaa \n bbb';
String bb = r'aaa \n bbb';
print(a);
print(b);
print(bb);
- 单引号能存储字符串
var aaa = 'asdfasdf';
- 三个单引号是保存长字符串,支持换行
- r 关键字是不能使用转义字符
asdfasdf
==asdfasdf
aaa
bbb
aaa \n bbb
- 字符串* []
String b = 'agggb';
print(b*5);
print(b[4]);
I/flutter ( 7429): agggbagggbagggbagggbagggb
I/flutter ( 7429): b
集合
- List
- list集合可以存储不同类型的数据
- 遍历可以直接传入方法
- 加了const关键字说明不可修改
var list =[1,"asdfas",'aaaa',false,0.2];
print(list);
list[0]="hhh";
print(list);
var list2 = const[1,2,3];
var list3=new List();
list.forEach(print);
I/flutter (26396): [1, asdfas, aaaa, false, 0.2]
I/flutter (26396): [hhh, asdfas, aaaa, false, 0.2]
I/flutter (26396): hhh
I/flutter (26396): asdfas
I/flutter (26396): aaaa
I/flutter (26396): false
I/flutter (26396): 0.2
- Map
- 可以存储不同类型的变量
- 加了const关键字说明不可修改
- List转Map key是从0开始排序的
- foreach可以传入自定义方法
var map={"ad":22,3:"gggg",1:"asd",true:'aa',0.58:'asdf'};
print(map[true]);
print(map["ad"]);
map[1]=false;
print(map[1]);
var finalMap = const{1:2};
map.forEach(myPrint);
print(map.keys);
print(map.values);
var list =['aaa','f',"asd",false,0.85];
print(list.asMap());
void myPrint(key,value){
print("key=$key,value=$value");
}
I/flutter (17298): aa
I/flutter (17298): 22
I/flutter (17298): false
I/flutter (17298): key=ad,value=22
I/flutter (17298): key=3,value=gggg
I/flutter (17298): key=1,value=false
I/flutter (17298): key=true,value=aa
I/flutter (17298): key=0.58,value=asdf
I/flutter (17298): (ad, 3, 1, true, 0.58)
I/flutter (17298): (22, gggg, false, aa, asdf)
I/flutter (17298): {0: aaa, 1: f, 2: asd, 3: false, 4: 0.85}
- dynamic
- 动态类型
dynamic b = 20;
b="kotlin";
//list本来就可以存动态类型
var dList = new List<dynamic>();
dList.add(1);
dList.add("bala");
print(dList);
var list = new List();
list.add("asdf");
list.add(false);
print(list);
运算符
- ??
- 有值的时候直接使用当前值,没有值的时候使用赋值的值
- a ?? b a 有值就用 a 的值 ,否则用 b 的值
int a = 10;
a ??= 66;
print(a);
var a;
var b = "kotlin";
print(a??b);
I/flutter (20501): kotlin
方法
- 没有返回值类型可以省略void不写
- 参数可以不写类型
- 方法体只有一个语句可以用 => 代替
myPrint(key,value){
print("key=$key,value=$value");
}
testReturn1(a, b) => "$a,$b";
var hello = 1;
testReturn2(a, b) => hello == 1 ? "$a" : "$b";
- {} 大括号包裹的是可选命名参数,调用的时候一定要 name:value 的形式
- [] 中括号包裹的是可选位置参数
- 如果既有可选参数又有普通的参数,那么普通的参数一定要写在前面
print(myPrint(1, value:2));
print(myPrint1(1, "asdf",1));
//可选命名参数
myPrint(key, {value,age}) {
print("key=$key,value=$value,age=$age");
}
//可选位置参数
myPrint1(key, [String value,aa]) {
print("key=$key,value=$value,aa=$aa");
}
- 可选参数可以有默认值,并且真正传入的值的数据类型可以和默认值不同
print(myPrint1(1, "asdf",1));
//可选位置参数
myPrint1(key, [value=10,aa]) {
print("key=$key,value=$value,aa=$aa");
}
- 方法可以赋值给变量
var fun01 = myPrint;
var fun02 = myPrint(1, value:2);
Function fun03 = myPrint(1, value:2);
- 字符乘法
var times01 = times;
print(listTimes(list02, times01));
String times(str) => str*3;
List listTimes(List list,String times(str)){
for(int i =0;i<list.length;i++){
list[i]=times(list[i]);
}
return list;
}
I/flutter (28302): [aaa, bbb, ccc, ddd]
- 匿名方法
(str) {
print("bala~~$str");
};
- 匿名变量赋值给变量,可以直接使用
var fun01 = (str) {
print("bala~~$str");
};
fun01("asdf");
- 直接调用匿名方法
((){
print("bbbbbbbbaaaaaa");
})();
- 匿名方法demo
var list = ["b","a","l","a"];
print(listTimes01(list));
List listTimes01(List list) {
var func = (str){return str*3;};
for (int i = 0; i < list.length; i++) {
list[i] = func(list[i]);
}
return list;
}
闭包
- 闭包是一个方法(对象)
- 闭包可以访问外部方法的局部变量,并持有其状态
- 注意闭包 a 中返回 printCount 和 printCount()的区别
a(){
int count = 6;
/*printCount(){
print(++count);
}
return printCount;*/
return (){
print(++count);
};
}
var func = a();
func();
func();
func();
I/flutter (28650): 7
I/flutter (28650): 8
I/flutter (28650): 9
网友评论