数据类型
-
基类是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