Flutter系列之Dart語法基礎
阿新 • • 發佈:2018-12-16
今天開始分享下Flutter移動開發的相關知識,下面是部分的Dart基礎語法知識。
Dart中所有東西都是物件,包括數字、函式等, 它們都繼承自Object,並且預設值都是null(包括數字)因此數字、字串都可以呼叫各種方法。
Dart中支援以下資料型別:
- Numbers
- Strings
- Booleans
- List(也就是陣列)
- Maps
void main() { //Dart 語言本質上是動態型別語言,型別是可選的 //可以使用 var 宣告變數,也可以使用型別來宣告變數 //一個變數也可以被賦予不同型別的物件 //但大多數情況,我們不會去改變一個變數的型別 //字串賦值的時候,可以使用單引號,也可以使用雙引號 var str1 = "Ok?"; //如果使用的是雙引號,可以內嵌單引號 //當然,如果使用的是單引號,可以內嵌雙引號,否則需要“\”轉義 //String str2 = ‘It\’s ok!’; String str2 = "It's ok!"; //使用三個單引號或者雙引號可以多行字串賦值 var str3 = """Dart Lang Hello,World!"""; //在Dart中,相鄰的字串在編譯的時候會自動連線 //這裡發現一個問題,如果多個字串相鄰,中間的字串不能為空,否則報錯 //但是如果單引號和雙引號相鄰,即使是空值也不會報錯,但相信沒有人這麼做 //var name = 'Wang''''Jianfei'; 報錯 var name = 'Wang'' ''Jianfei'; //assert 是語言內建的斷言函式,僅在檢查模式下有效 //如果斷言失敗則程式立刻終止 assert(name == "Wang Jianfei"); //Dart中字串不支援“+”操作符,如str1 + str2 //如果要連結字串,除了上面訴說,相鄰字串自動連線外 //還可以使用“$”插入變數的值 print("Name:$name"); //宣告原始字串,直接在字串前加字元“r” //可以避免“\”的轉義作用,在正則表示式裡特別有用 print(r"換行符:\n"); //Dart中數值是num,它有兩個子型別:int 和 double //int是任意長度的整數,double是雙精度浮點數 var hex = 0xDEADBEEF; //翻了半天的文件,才找打一個重要的函式:轉換進位制,英文太不過關了 //上面提到的字串插值,還可以插入表示式:${} print("整型轉換為16進位制:$hex —> 0x${hex.toRadixString(16).toUpperCase()}"); }
上面列舉一些常見的資料物件;
在宣告變數的時候,除了var,還可以使用const和final,同時,在使用const和final的時候,可以省略var或者其他型別;
const和final定義的都是常量,值不能改變,
- const定義的是編譯時常量,只能用編譯時常量來初始化
- final定義的常量可以用變數來初始化
const list = const[1,2,3];//Ok const list = [1,2,3];//Error final list = [1,2,3];//Ok final list = const[1,2,3];//Ok final list = const[new DateTime.now(),2,3];//Error,const右邊必須是常量
函式定義:
如果函式只是簡單的返回一個表示式的值,可以使用箭頭語法 =>expr; 它等價於{return expr;} 所以上面的函式也可以這樣寫
sayHello(name) => 'Hello $name!';
可選引數:
Dart中支援兩種可選引數:命名可選引數和位置可選引數 但兩種可選不能同時使用
- 命名可選引數使用大括號{},預設值用冒號:
- 位置可選引數使用方括號[],預設值用等號=
在命名可選引數的函式中,大括號外的a為必填引數 大括號內的引數可以指定0個或多個 並且與順序無關,在呼叫函式的時候需要指明引數名 沒有賦值的引數值為null
FunX(a, {b, c:3, d:4, e}) { print('$a $b $c $d $e'); }
在位置可選引數的函式中,大括號內的引數可以指定0個或多個 在呼叫的時候引數值會依次按順序賦值
FunY(a, [b, c=3, d=4, e])
{
print('$a $b $c $d $e');
}
void main()
{
FunX(1, b:3, d:5);
FunY(1, 3, 5);
}
本文圖片資料來源出自“Dart語言中文社群”,允許轉載,轉載時請務必以超連結形式標明文章原始出處 。