特點
Dart語言支持JIT與AOT。
Dart語言采用單線程模型。
Dart語言是強類型編程語言,但是允許弱類型語言式編程。
基本語法
1.變量和常量
變量
var、object、dynamic關鍵字或數據類型顯式聲明變量。
命名規則:
- 變量名稱必須由數字、字母、下劃線或$組成;
- 變量名開頭不能是數字;
- 變量名不能是保留字或關鍵字;
- 變量名區分大小寫;
void main() {//隱式聲明var i = "hello word";print(i);var j; //定義變量時,未指定默認值,則該變量的數據類型是可變的。// j = 100;j = "hello";print(j);//用object定義變量,重新賦值時,類型可變Object k = 1;k = "qwe";print(k);//dynamic 重新賦值,類型可變dynamic m = 10;m = "asdadasd";print(m);//顯式聲明//整數int age = 90;//浮點類型double d = 2;//字符串String str = "11111";
}
常量
使用final或者const定義常量。final或const定義的常量時必須初始化,初始化后的常量是只讀的,不可變的。
//常量final f = 10;print(f);const cc = 101;print(cc);final String str1 = "qwewqe";final double dd = 2.7;//final是正確的 const是錯誤的。// const 在“=”左邊,聲明的值一定是編譯時常量。//當const用在“=”右邊時,右邊對象的整個狀態值在編譯時完全確定,并且對象被凍結且完全不可變。final date = DateTime.now();const date1 = DateTime.now();
2.數值類型
- Number(數值類型)
dart語言中的包括int和double兩種數據類型。
var a = 10;//十進制10var h = 0xA;//十六進制10var d = 2.7;//十進制浮點型2.7//除號,算出來的值是double類型的int k = 10/2;//錯double k2 = 10/2;//對
- string
String str = "ha ha ha";String str2 = 'hello';//拼接String aStr = "hello";String bStr = " word";String cStr = aStr + bStr;String ddStr = "$aStr$bStr";print(aStr.indexOf("e"));//字符首次出現的位置 1print(aStr.lastIndexOf("e"));//字符最后出現的位置 1print(aStr.substring(1,3));//字符最后出現的位置 elprint(aStr.split("e"));//拆分字符串 [h, llo]print(aStr.toUpperCase());//轉大寫 HELLOprint(aStr.toLowerCase());//轉小寫 helloprint(aStr.startsWith("he"));//是否以he開頭 trueprint(aStr.endsWith("lo"));//是否以lo開頭 trueprint(aStr.contains("lo"));//是否包含lo trueprint(aStr.replaceAll("he", "1111"));//替換he為111 1111lloprint(aStr.compareTo("abc"));//比較字符串 1表示左邊的字符串大于右邊,0相等,-1 小于
3.Boolean
bool flag = false;
4.List
List names = ["張三", "李四", "王五"];List names2 = ["張三", "李四", "王五", 12];print(names.length); //長度 3print(names[1]); //李四//添加元素names.add("趙六"); //[張三, 李四, 王五, 趙六]print(names);//刪除元素names.remove("李四"); //[張三, 王五, 趙六]print(names);//插入names.insert(1, 6666); //[張三, 6666, 王五, 趙六]print(names);//查找元素int i = names.indexOf(6666); // 1print(i);//將數組元素轉化為由特定符號分割print(names.join("@"));//張三@6666@王五@趙六
5.Set
Dart語言中Set表示一個元素唯一且無序的集合,不能通過索引下標獲取數據元素。
var s = Set();s.add(1);s.add("張三");s.add(true);//list轉set,會去掉重復的元素List<int> lists = [1, 2, 3, 4, 3, 2, 5];Set ss = lists.toSet(); // {1, 2, 3, 4, 5}print(ss);
6.Map
Map person = {"id": "001", "name": "zhang san", "age": "25"};//輸出所有的值print(person.values); //(001, zhang san, 25)//輸出所有的鍵print(person.keys); //(id, name, age)//輸出name的值print(person["name"]); //zhang san//添加鍵值對Map weight = {"weight": "120"};person.addAll(weight);print(person); //{id: 001, name: zhang san, age: 25, weight: 120}//刪除鍵值對person.remove("name");//{id: 001, age: 25, weight: 120}print(person);
7.List、Set、Map的常用方法
forEach遍歷
//遍歷List list = ["蘋果","南瓜","西瓜"];list.forEach((element) {print(element);});I/flutter ( 2677): 蘋果
I/flutter ( 2677): 南瓜
I/flutter ( 2677): 西瓜
map遍歷用于修改元素的值
List list = ["蘋果", "南瓜", "西瓜"];var ll = list.map((e) {return e + "1";});print(ll);I/flutter ( 2677): (蘋果1, 南瓜1, 西瓜1)
where用于過濾list或set中的數據元素,并返回一個集合。
//保留大于3的值List list = [100, 1, 0, 2, 300, 150];var ll = list.where((element) {return element > 3;});print(ll);I/flutter ( 2677): (100, 300, 150)
any用于判斷list或set中的數據元素只要有一個滿足條件,返回值為true。
List list = [100, 1, 0, 2, 300, 150];var has = list.any((element) {return element > 10;});print(has);var has1 = list.any((element) {return element > 1000;});print(has1);I/flutter ( 2677): true
I/flutter ( 2677): false
every用于判斷list或set中的數據元素全部滿足條件,返回值為true。
List list = [100, 1, 0, 2, 300, 150];var f = list.every((element) {return element > 100;});print(f);var f2 = list.every((element) {return element > -1;});print(f2);I/flutter (20829): false
I/flutter (20829): true