Dart基礎入門語法介紹,詳細說明可以查看相關視頻《Dart編程語言入門》。
變量與常量
變量
1.使用?var?聲明變量,默認值為?null
var a;//null
a = 10;
2.顯示類型聲明
int a;//null
a = 10;
3.使用?var?聲明,可賦予不同類型的值
var a; //null
a = 10; //int
a = "Dart"; //string
4.使用?final?聲明只能賦值一次的變量
final a = 30;
a = 10; //Error
常量
使用?const?聲明編譯期常量
const a = 10;
數據類型
數值型
Dart中使用?num?表示數值型,子類只有兩種:int?和?double,分別表示整型和浮點型。
1.使用?num?聲明的類型既可以接收整型,也可以接收浮點型;
num a = 10; //int
a = 12.5; //double
2.使用?int?聲明整型;
int a = 10;
3.使用?double?聲明浮點型
double a = 10.5;
4.常用屬性和方法(更多可查看相關api)
int a = 30;
a.isEven;//是否偶數
a.isOdd; //是否奇數
a.abs();// 絕對值
a.toDouble();//轉換為浮點型
...int b = 10.5;
b.toInt();//轉換為整型
b.round(); //四舍五入,11
b.floor(); //不大于b的最大整數,10
b.ceil(); //不小于b的最小整數,11
...
字符串
Dart中使用?String?表示字符串。
1.使用?單引號?或?雙引號?創建字符串;
String str = "Dart";String str = 'Dart';
2.使用?三個單引號?或?三個雙引號?創建多行字符串;
String str = '''HelloDart''';String str = """HelloDart""";
3.使用?r?創建原始字符串
String str = r'Hello \n Dart'; // "\n"不會被轉義
4.插值表達式
使用?${ }?表示插件表達式,單個變量可省略?{ }。
int a = 1;
int b = 2;
print("a + b = ${a + b}");
5.常用屬性和方法(更多可查看相關api)
str.length;//字符串長度
str.isEmpty;//是否為空
...str.contains('xxx');//是否包含xxx
str.substring(0,3);//截取前三個字符
str.startsWith('xxx‘);//是否以xxx開頭
str.split(",");//以,分隔字符串,返回數組
...
布爾型
Dart中使用?bool?表示布爾型。布爾型的值只有?true?和?false。
bool isTrue = true;
bool isFalse = false;
List body ol,body ul{margin:0;padding:0;}body .list-paddingleft-1{padding-left:0} body .list-paddingleft-2{padding-left:20px} body .list-paddingleft-3{padding-left:40px}
Dart中使用?List?表示列表,它和數組是同一概念。
1.創建List,使用?const?創建不可變的List
var list = [1, 2, 3];//創建不可變的List
var list = const[1, 2, 3];//使用類創建
var list = new List();
2.常用屬性和方法(更多可查看相關api)
- 獲取元素個數
list.length;
- 判斷是否為空
list.isEmpty;list.isNotEmpty;
- 添加元素
list.add('xxx');list.insert(index,'xxx'); //在下標位置添加元素
- 刪除元素
list.remove('xxx');list.clear(); //清空list
- 修改元素
list[0] = 'xxx'; //修改下標為0的元素值為xxx
- 查詢元素
list[0];//獲取第一個元素,下標從0開始
- 其它
list.indexOf('xxx');//查詢元素xxx,返回下標,不存在返回-1list.sort(); //排序list.subList(start,end);//獲取從子列表list.forEach(); //遍歷list
...
Map
Dart中使用?Map?表示key-value鍵值對。
1.創建Map,使用?const?創建不可變的Map
var map = {'first':'Java','second':'Dart'};//創建不可變的Map
var map = {'first':'Java','second':'Dart'};//使用類創建
var map = new Map();
2.常用屬性和方法(更多可查看相關api)
- 獲取元素個數
map.length;
- 判斷是否為空
map.isEmpty;map.isNotEmpty;
- 添加元素
map['third'] = 'JavaScript'; //添加key為thrid,value為JavaScript的元素
- 刪除元素
map.remove('third'); //刪除key為third的元素map.clear(); //清空map
- 修改元素
map['first'] = 'C++'; //修改key為first的value為C++
- 查詢元素
map['first'];//獲取key為first的value
- 其它
map.keys; //獲取map所有的keymap.values; //獲取map所有的valuemap.containsKey('first'); //map是否包含key為first的元素map.containsValue('Java'); //map是否包含value為Java的元素map.forEach(); //遍歷map
...
map相加 .List相加.===========================================>
Map a = {'a':1, 'b':2};
Map b = {'c':3, 'd':4};
// print(a+b);
List c = [1,2,3];
var d = [4,5];
// print(c+d);
a.addAll(b);
print(a);
運算符
Dart中的很多運算符和其它語言是相似的,個別不同用法會詳細說明。
算術運算符
- 加減乘除:?+ , - , * , / , ~/ , %
“/” 運算符結果為浮點型;
"~/" 運算符為求整,類似Java中的"/";
"%"運算符為求余;
- 遞增遞減:?++var , var++ , --var , var–
關系運算符
關系運算符包括:== , != , > , < , >= , <=
"=="運算符只是判斷內容是否相同。
邏輯運算符
邏輯運算符包括:! , && , ||
賦值運算符
- 基礎運算符:?= , ??=
“??=” 表示左側變量為空時進行賦值,否則不賦值
int a;
a ??= 5; // a = 5int a = 10;
a ??= 5; //a = 10
- 復合運算符: *+= , -= ,?= , /= , %= , ~/=
條件運算符
- 三目運算符:?condition ? expr1 : expr2
- ??運算符:?expr1 ?? expr2
"??"運算符表示如果expr1為null,則使用expr2的結果,否則使用expr1
String a = "Dart";
String b = "Java";
String c = a ?? b; //c = "Dart"String a;
String b = "Java";
String c = a ?? b; //c = "Java"
控制流
if語句
if語句和其它語言類似。
if(condition1){//...if(condition2){//...}
} else if(condition3){//...
} else {//...
}
for語句
var list = [1,2,3,4,5];for(var index = 0;index < list.length;index++){print(list[index]);
}
for…in語句
for(var item in list){print(item);
}
while語句
int count = 0;while(count < 5){print(count++);
}
do…while語句
do{print(count--);
}while(count > 0 && count < 5);
break和continue
break:終止當前循環;
continue:跳出當前循環,繼續下一次循環;
switch語句
switch語句支持num、String、編譯期常量、對象和枚舉。
switch(language){case "Dart":print("Dart is my favorite");break;case "Java":print("Java is my favorite");break;case "Python":print("Python is my favorite");break;default:print("None");
}
支持使用continue跳轉標簽:
switch(language){Test:case "Dart":print("Dart is my favorite");break;case "Java":print("Java is my favorite");continue Test;case "Python":print("Python is my favorite");break;default:print("None");
}
assert語句
assert條件表達式為false時會拋出異常。
assert(str != null);
方法
方法聲明
返回類型 方法名(參數1,參數2,....){
方法體…
return 返回值
}
- 方法也是對象,并且有具體類型Function;
- 返回值類型、參數類型都可省略;
void printPerson(String name,int age){print("name=$name,age=$age");
}printPerson(name,age){print("name=$name,age=$age");
}
- 方法都有返回值。如果沒有指定返回類型,默認return null最后一句執行;
printPerson(String name,int age){print("name=$name,age=$age");//return null;
}
- => 語法,適用于方法體只有一個表達式的情況;
printPerson(String name,int age) => print("name=$name,age=$age");
可選參數
- 可選命名參數,調用時使用名稱傳值。
printPerson(String name,{int age,String gender}){print("name=$name,age=$age,gender=$gender");
}//方法調用
printPerson("李四",age: 20);
printPerson("李四",age: 20,gender: "Male");
- 可選位置參數,調用時根據參數位置傳遞對應類型。
printPerson2(String name,[int age,String gender]){print("name=$name,age=$age,gender=$gender");
}//方法調用
printPerson2("張三",18);
printPerson2("張三",18,"Female");
- 如果存在具體參數,可選參數聲明,必須在參數后面
默認參數值
在可選參數中可以使用默認參數值,默認參數值必須是編譯期常量。
printPerson(String name,{int age = 30,String gender = "Female"}){print("name=$name,age=$age,gender=$gender");
}
方法對象
Dart中一切都對象,包括方法。所以方法也可以作為對象賦值給其它變量,也可以作為參數傳遞給其它方法。
- 方法賦值給其它變量
void printHello(){print("Hello");
}Function func = printHello;
func();
- 方法作為參數傳遞
//第二參數是一個方法
List listTimes(List list ,String t(str)){for(var index = 0;index < list.length;index++){list[index] = t(list[index]);}return list;
}String times(str){return str*3;
}//方法作為參數調用
var list2 = ["h","e","l","l","o"];
print(listTimes(list2, times));
匿名方法
匿名方法沒有具體的名稱,和方法有相同的特性,也是對象,也可作為變量賦值和參數傳遞。
- 匿名方法聲明
(參數1,參數2,….){
方法體…
return 返回值
}
- 匿名方法賦值
var func = (str){print("Hello---$str");
};func(30);
- 匿名方法作為參數
List listTimes(List list ,String times(str)){for(var index = 0;index < list.length;index++){list[index] = times(list[index]);}return list;
}//使用匿名方法傳遞參數
var result = listTimes(list2, (str){ return str * 3;});
閉包
- 閉包是一個方法(對象);
- 閉包定義在其它方法內部;
- 閉包能夠訪問外部方法內的局部變量,并持有其狀態
//該方法返回一個閉包
a(){int count = 0;return (){print(count++);};
}//閉包的調用可以訪問局部變量count
var func = a();
func();
func();
func();
func();
?