数据类型
基类是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();
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
匿名方法 (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