1. 程式人生 > 其它 >Flutter學習第二天:Dart常用資料型別以及方法大總結,滿滿的乾貨,對於學過Python和java的太友好了?

Flutter學習第二天:Dart常用資料型別以及方法大總結,滿滿的乾貨,對於學過Python和java的太友好了?

技術標籤: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沒有做型別轉換,不能進行直接的計算操作
在這裡插入圖片描述

持續學習中。。。。。