Flutter學習第二天:Dart常用資料型別以及方法大總結,滿滿的乾貨,對於學過Python和java的太友好了?
阿新 • • 發佈:2021-01-23
技術標籤:Flutterflutterandroidandroid studio程式語言dart
Dart的資料型別
這個我學習Flutter的第二天,因為學習Flutter的肯定得學習Dart語言,Dart是Flutter的主要開發語言。我的第一個感覺是Dart的語法好像是python和java的結合體,雖然他也有屬於他自己的一些語法,但是整體來說,主要學了一門語言,大部分都是相通的,只是可能表達形式不一樣。
Dart的常用資料型別
1.num
num:數值型變數
,可以儲存(負數,整數,浮點數等)。
num num1=-1.0;
num num2=2;
num num3=3.18;
print("num:$num1 num:$num2 num:$num3");
輸出:
2.int、double型別
int int1=3;
double d1=1.68;
print("int:$int1 double:$d1");
輸出:
num的方法:
num num1=-1.0;
print(num1.abs()); //求絕對值
print(num1.toInt()); //轉換成int
print(num1.toDouble()); //轉換成Double
3.String型別
1.可以用雙引號或者單引號
來賦值。
2.有兩種字串拼接
方式,如下方程式碼。
String str1='字串',str2="雙引號"; //可以用雙引號,或者單引號
String str3='str1:$str1 str2:$str2'; //字串拼接
String str4='str1:'+str1+' str2:'+str2; //字串拼接
print(str3)
print(str4)
輸出:
字串的常用方法:
String str5='常用資料型別,請空控制檯輸出輸出';
print(str5.split('型別')); //字串在型別處進行分割存入集合
print(str5.substring(1,5)); //字串擷取
print(str5.indexOf('型別')); //獲取指定字串位置
String str6 = 'https://www.baidu.com/';
print(str6.startsWith("https")); //檢測字串是否以指定的子字串開始
print(str6.endsWith("/")); //檢測字串是否以/結尾
print(str6.toUpperCase()); //所有小寫字母轉化為大寫
print(str6.toLowerCase()); //所有大寫字母轉化為小寫
print(str6.length); //長度
print(str6.replaceFirst('t', 'p')); //只替換字串裡面的第一個出現的t
print(str6.replaceAll('t','p')); //替換資料,把字串裡面所有的t替換成p
輸出:
4.bool型別
bool success=true,fail=false;
print(success);
print(fail);
print(success||fail); //true 或
print(success&&fail); //false 與
輸出:
5.List型別
1.List型別新增資料的兩種方式
List list=[1,2,3,4,'集合']; //初始化時新增元素
print(list);
List list3=[];
list3.add('list3'); //通過add方法新增元素
list3.addAll(list); //把list中資料新增到list3中
輸出:
2.其他方法:
集合之間賦值:把list中的值傳遞給list2
,關於dynamic,我下面會說明。
List list=[1,2,3,4,'集合']; //初始化時新增元素
print(list);
List<dynamic> list2=[];
list2=list;
print(list2);
generate方法和Pythonrange方法類似。
List list4=List.generate(3, (index) => index*2);
print(list4);
輸出:
3.List型別遍歷的三種方法:
List list=[1,2,3,4,'集合'];
for(int i=0;i<list.length;i++){
print(list[i]);
}
for(var o in list){
print(o);
}
list.forEach((val) {
print(val);
});
4.常用方法
List list=[1,2,3,4,'集合']; //初始化時新增元素
print(list.remove('集合')); // 刪除第一個匹配的資料
print(list.removeAt(3)); //刪除第三個資料
list.removeRange(2, 3); //刪除下標為2的資料
print(list);
print(list.indexOf(3)); //找到第一個滿足條件的下標
list.insert(2, 'json'); //插入資料
print(list);
list.insertAll(2, ['bad','good']); //插入一個數組
print(list);
List list1=[1,2,3,4,6];
list1.retainWhere((value) => value % 2 == 0);
print(list); //刪除不滿足的條件
6.Map型別
1.Map型別的新增資料的兩種方式
Map names={'xiaoming':'小明','xiaohong':'小紅'};
print(names);
Map ages={};
ages['xiaoming']=16;
ages['xiaohong']=18;
print(ages);
輸出:
2.Map型別的遍歷
ages.forEach((key, value) {
print('$key,$value');
});
for (var key in ages.keys) {
print('$key ${ages[key]}');
}
輸出:
3.Map型別之間傳值
Map ages2=ages.map((key, value){
return MapEntry(key, value);
});
print(ages2);
7.dynamic、var、Object三者的區別
我學習視訊老師是這樣說的:
dynamic:是所有Dart物件的基礎型別, 在大多數情況下,通常不直接使用它,
通過它定義的變數會關閉型別檢查,這意味著 dynamic x = 'hal';x.foo();
這段程式碼靜態型別檢查不會報錯,但是執行時會crash,因為x並沒有foo()方法,所以建議大家在程式設計時不要直接使用dynamic;
var:是一個關鍵字,意思是“我不關心這裡的型別是什麼。”,系統會自動推斷型別runtimeType;
Object:是Dart物件的基類,當你定義:Object o=xxx;時這時候系統會認為o是個物件,你可以呼叫o的toString()和hashCode()方法
因為Object提供了這些方法,但是如果你嘗試呼叫o.foo()時,靜態型別檢查會進行報錯;
綜上不難看出dynamic與Object的最大的區別是在靜態型別檢查上;
1.個人認為dynamic,object兩個和var的還是很容易區別的,如下圖:
(其中runtimeType方法是來檢視型別的)
dynamic和object:開始x和o1都是字串型別,把他們賦值為int型別不會報錯
。因為dynamic是所有Dart物件的基礎型別,Object是Dart物件的基類(父類)。
var:如果開始為字串型別,賦值為int型別會爆紅
。因為var第一次賦值會確定它的型別。
2.dynamic,object的區別,dynamic與Object的最大的區別是在靜態型別檢查上
dynamic:可以看到x可以進行++操作
。因為dynamic不需要型別轉換的原因是dynamic跳過編譯型別檢查。
Object:進行o1++操作的話會爆紅
。object沒有做型別轉換,不能進行直接的計算操作
持續學習中。。。。。