概述
- Dart是Google發(fā)布的開源語言
- Dart是面向?qū)ο缶幊陶Z言
- Dart目前可用于全平臺開發(fā)(Web開發(fā)蝙昙,跨平臺Flutter開發(fā)硼瓣,腳本或服務端開發(fā))
變量
- 使用var觀景子進行申明狈邑,可賦予不同類型的值
var a = 10;
print(a); //10
var b = "str";
print(b); //str
2.未被初始化芝囤,默認值為null
var c ;
print(c);//null
- final申明變量只能被賦值一次
final d = "yxjie";
// d=10; //編譯器報錯
// d="str";//編譯器報錯
常量
使用const申明的常量秕脓,為編譯期常量
const a = 10 ; //不可變了
數(shù)據(jù)類型(內(nèi)置數(shù)據(jù)類型)
- 數(shù)值型(Number)【整型:int 浮點型:double】
數(shù)值型操作
1.運算符:+灌灾,-雕旨,*扮匠,/,~/(整除)凡涩,%
2.常用屬性:isNaN棒搜,isEvent (是否是偶數(shù)),isOdd(是否是奇數(shù))等
3.常用方法:abs(),round(),toInt(),toDouble()
- 字符串(String)
注:字符串內(nèi)容比較使用== 【與java或Kotlin不一樣】活箕,也是支持插值表達式的 - 布爾型 (Boolean)
- 列表 (List)
//三種創(chuàng)建方式
var list=[1,2,3];
var list2=const[1,'yxjie',true];
var list3 = new List();
list3.add("hahah");
list3.insert(0, "yxjie");
list3.remove("yxjie");
list3.clear();
list2.forEach(print);
- 鍵值對(Map)
void main(){
var map={1:"Dart",2:"Java",3:"Kotlin",4:4};
var map2=const{1:"Dart",2:"Java",3:"Kotlin",4:4};
var map3=new Map();
map3[1]="hha";
map3["2"]="lalal";
print(map3.containsKey(2));
print(map);
print(map.length);
print(map.containsKey(1));
print(map.containsValue("java"));
map3.forEach(pf);
}
void pf(key,value){
//差值表達式
print("key=\$key,value=\$value");
}
for語句
var list = [1,2,3,4];
for(var i = 0;i < list.length;i++){
print(i);
}
print('=====');
for(var item in list){
print(item);
}
switch...case語句
- 比較類型:num,String,編譯器常量力麸,對象以及枚舉
- 非空case必須有個break
- default處理默認條件
- continue跳轉(zhuǎn)制定標簽
var language = "Kotlin";
switch (language) {
D:
case "java":
print("java---");
break;
case "Kotlin":
print("Kotlin---");
continue D;
default:
print("Dart");
}
// 運行結(jié)果
//Kotlin---
//java---
方法
方法特性
- 方法也是對象且類型為Fuction
- 返回值類型,參數(shù)類型都可省略(js類似)
- 箭頭語法:=> a 是{return a},只支持一個表達式
- 方法都有返回值育韩,如不指定克蚂,默認返回null
//標準定義
void getPerson(String name,int age){
print("name=\$name,age=\$age");
}
// 返回值參數(shù)類型都可以省略
getPerson2(name,age){
return "name=\$name,age=\$age";
}
// 箭頭函數(shù)
getPerson3(name,age)=>"name=\$name,age=\$age";
可選參數(shù)
- 可選命名參數(shù):{param1,param2,...}
- 可選位置參數(shù):[param1,param2,...]
void main(){
getPerson("Yxjie");
getPerson("yxjie",age: 27);
//輸出結(jié)果
//name=Yxjie,age=null
//name=yxjie,age=2
getPerson2("Jerry");
getPerson2("jerry",18);
getPerson2("Jerry",18,"boy");
//運行結(jié)果
//name=Jerry,age=null,gender=null
//name=jerry,age=18,gender=null
//name=Jerry,age=18,gender=boy
}
getPerson(name,{age}){
print("name=\$name,age=\$age");
}
getPerson2(name,[age,gender])=> print("name=\$name,age=\$age,gender=\$gender");
默認參數(shù)
- 使用= 給參數(shù)設置默認值(與Kotlin類似)
- 默認參數(shù)值只能是編譯時常量
void main(){
getPerson("yxjie");
getPerson("yxjie",age: 28);
//運行結(jié)果
//name=yxjie,age=18
//name=yxjie,age=28
}
getPerson(name,{age=18}){
print("name=\$name,age=\$age");
}
方法對象
- 方法可作為對象賦值給其他變量
- 方法可作為參數(shù)傳遞給其他方法
void main(){
var fun=sayHello;
fun(); //say hello!!!
//方法作為參數(shù)傳遞給另一個方法
var list=["Java","Kotlin","Dart","Python"];
list.forEach(print);
}
sayHello()=>print("say hello!!!");
匿名方法特性
- 可賦值給變量,通過變量進行調(diào)用
- 可在其他方法中直接調(diào)用
void main() {
var a = (s) {
print("hello,\$s");
};
a("Yxjie"); //hello,Yxjie
var list = ["a", "b", "c"];
print(listAddPre(list, addPre)); //[new a, new b, new c]
print(listAddPre(list, (s) {
return s * 3;
}));//[new anew anew a, new bnew bnew b, new cnew cnew c]
}
addPre(s) => "new " + s;
listAddPre(List list, addPre(s)) {
for (var i = 0; i < list.length; i++) {
list[i] = addPre(list[i]);
}
return list;
}
閉包
- 閉包是一個方法對象
- 閉包定義在其他方法內(nèi)部
- 閉包能夠訪問外部方法局部變量筋讨,并持有他的狀態(tài)
void main(){
var fun=a();//與方法對象略微不一樣
fun();//0
fun();//1
}
a(){
var count=0;
printCount(){
print(count++);
}
return printCount;
}