既然 Dart 是一門語言,那麼就和咱們所知道語言同樣,有基本的數據類型以及常見的流程處理語法,那麼咱們就來了解下。javascript
Dart 的全部東西都是對象,包括數字,函數等。它們都繼承自 Object ,默認是都是 null(包括數字),因此數字,字符串均可以調用各類方法。java
使用 var 聲明變量,可賦予不一樣類型的值;未初始化時,默認值爲 null ;使用 final 聲明一個只能賦值一次的變量數組
void main(){ // 聲明一個變量 a var a; print(a); // 打印 a 的值,顯示爲 null a = 10; print(a); // 打印出來的結果爲 10 a = "測試字符串"; print(a); // 打印出來的結果爲 測試字符串 a = 30; print(a); // 打印出來的結果爲 30 final b = 10; b = 20; // 這個會報錯,有提示: [dart] 'b', a final variable, can only be set once. }
在 dart 中使用 const 聲明常量;使用 const 聲明的必須是編譯期常量。函數
void main(){ const a = 10; a = 20; // 這裏也會報錯:[dart] Constant variables can't be assigned a value. }
在上面咱們能夠看到 dart 的一些簡單的語法。其實和 js 蠻像,聲明的變量的數據類型是隨便去改變的,沒有一個固定的數據類型(例如:java 這種語言)。其次就是 final 和 const 均可以聲明變量,而且聲明瞭變量以後都不能修改。測試
這裏簡單的說下 final 與 const 的區別:spa
final 要求變量只能初始化一次,並不要求賦的值必定是編譯時常量,能夠是常量也能夠不是。而 const 要求在聲明時初始化,而且賦值必需爲編譯時常量。.net
在Dart 有幾種內置的數據類型:數值型-Number、布爾型-boolean、鍵值對-Map、字符串-String、列表-List、其餘類型-Runes、Symbols對象
Dart 中只提供了兩種類型:blog
num
一、整形int
二、浮點型double排序
void main(){ num a = 10; // 整形 a = 20.1; // 浮點型 int i = 10; i = 10.1; // 這個地方會報錯,由於將 int 型的數據改成 double 型 double d = 20.1; d = 20; // 這個地方會報錯,由於將 double 型的數據改成 int 型 }
從上面能夠看到若是是使用 num 聲明的變量,能夠隨意的轉換類型,可是若是是使用了int 或者 double 明確的聲明,那麼就不能轉換了
運算符: +、 - 、* 、/ 、 ~/ 、 %
經常使用屬性: isNaN、isEven、isOdd
經常使用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()
// 因爲經常使用的方法在其餘語言中都有,就不過去的贅述,下面列出一些特殊的 void main(){ int i = 10; double d = 20.1; print(i/d); // 0.49751243781094523 print(i~/d); // 0 這個操做是取整 print( i.isOdd ); // 判斷是奇數 print( i.isEven ); // 判斷是偶數 }
// String -> int var one = int.parse('1'); assert(one == 1); // String -> double var onePointOne = double.parse('1.1'); assert(onePointOne == 1.1); // int -> String String oneAsString = 1.toString(); assert(oneAsString == '1'); // double -> String String piAsString = 3.14159.toStringAsFixed(2); assert(piAsString == '3.14');
void main(){ String string = '單引號聲明字符串'; String string1 = "雙引號聲明字符串"; }
void main(){ String str = '單引號中的"雙引號"'; String str1 = "雙引號中的'單引號'"; print(str); print(str1); String str2 = '單引號中的 \'單引號\' '; String str3 = "雙引號中的 \"雙引號\" "; print(str2); print(str3); }
void main(){ // 使用的是空格拼接,多個空格也能夠 String str1 = '單引號空格字符串' '拼接' '~'; // 單引號字符串空格拼接~ // 使用換行符以及空格 String str2 = '單引號符串' '換行了' '再加空格' '拼接'; // 單引號符串換行了再加空格拼接 // 單雙引號 空格拼接 String str3 = "單雙引號空格字符串" '拼接' "~"; // 單雙引號字符串空格拼接~ // 單雙引號 換行符以及空格 String str4 = "單雙引號符串" '換行了' '再加空格' '拼接'; // 單雙引號符串換行了再加空格拼接 String str5 = ''' 使用3個單引號、 看到我使用了麼 '''; String str6 = """ 使用3個雙引號、 看到我使用了麼 """; String str7 = "算了,仍是正常一點" + ",使用 + 來拼接"; }
void main(){ // 拼接字符串, 輸出:單引號空格 或者 雙引號空格 String blockStr = '單引號''空格'; String blockStr1 = '單引號' '空格'; String blockStr2 = "雙引號""空格"; String blockStr3 = "雙引號" "空格"; // 下面這兩種狀況會報錯 // String blockStr4 = '單引號''''空格'; // String blockStr5 = "雙引號""""空格"; // 測試中間添加字符 String blockStr6 = '單引號''_''空格'; // 輸出:單引號_空格 String blockStr7 = "雙引號""#""空格"; // 注意不能使用 $,$會報錯, 輸出:單引號#空格 // 單雙引號混合使用 String blockStr8 = '單""""引號'; // 輸出:單""""引號 String blockStr9 = '單""_""引號'; // 輸出:單""_""引號 // 單雙引號混合使用 String blockStr10 = "雙''''引號"; // 輸出:雙''''引號 String blockStr11 = "雙''_''引號"; // 輸出:雙''_''引號 }
相似於JS中 ES6 上面的表達式的使用,感受是相通的。
void main(){ var flag = false; var str = "測試字符串"; print("咱們來驗證字符串:${str}" "而後看看咱們的 flag:${flag}"); // 最後輸出的結果爲:咱們來驗證字符串:測試字符串而後看看咱們的 flag:false }
assert 是語言內置的斷言函數,僅在檢查模式下有效
在開發過程當中, 除非條件爲真,不然會引起異常。(斷言失敗則程序馬上終止)。
// 檢查是否爲空 var fullName = ''; assert(fullName.isEmpty); // 爲0檢查 var hitPoints = 0; assert(hitPoints <= 0); // 檢查是否爲 null. var unicorn; assert(unicorn == null); // 檢查是否爲 NaN. var iMeantToDoThis = 0 / 0; assert(iMeantToDoThis.isNaN);
void main(){ // 使用構造建立 var list = new List(); //建立一個int類型的list List intlist = [1, 2, 3]; // 建立一個常量List, 不能夠改變的List List constList = const[10, 7, 23]; }
void main(){ // 在數組中能夠存放多個不一樣類型的對象 var list = [1, 2, 3, 'Flutter', true]; print(list); // 輸出的結果:[1, 2, 3, Flutter, true] // 修改數組下標爲2 的值 list[2] = 'Dart'; print(list); // 輸出的結果:[1, 2, Dart, Flutter, true] // 獲取數組的長度 print(list.length); // 輸出的結果:5 // 向數組中添加元素 list.add("value"); print(list); // 輸出的結果:[1, 2, Dart, Flutter, true, value] // 向數組中的指定位置添加元素 list.insert(1, 'element'); print(list); // 輸出的結果:[1, element, 2, Dart, Flutter, true, value] // 移除數組中的元素 list.remove("value"); print(list); // 輸出的結果:[1, element, 2, Dart, Flutter, true] // 移除數組中指定的元素 list.removeAt(1); print(list); // 輸出的結果:[1, 2, Dart, Flutter, true] // 判斷數組中是否有某個元素 print(list.indexOf("element")); // 輸出結果:-1 // 可使用 sort() 函數來排序, 可是因爲咱們使用定義的數組類型不同,就不能使用 var intlist = [1, 2, 5, 6 ,3]; // 根據語法提示: List.sort([(int, int) → int compare]) → void intlist.sort( (a, b) => a.compareTo(b) ); print(intlist); // 輸出結果:[1, 2, 3, 5, 6] }
void main(){ // 建立Map var language = {'fisrt': 'dart', 'second': 'java'}; // 建立不可變的 Map var constLanguage = const {'fisrt': 'dart', 'second': 'java'}; // 經過構造器建立 var initLanguage = new Map(); }
void main(){ // 建立Map var map = {'fisrt': 'dart', 'second': 'java'}; // 獲取長度 print(map.length); // 輸出結果:2 // 判斷是否爲空 print(map.isEmpty); // 輸出結果:false print(map.isNotEmpty); // 輸出結果:true // 獲取到全部的 key print(map.keys); // 輸出結果:(fisrt, second) // 獲取到全部的 values print(map.values); // 輸出結果:(dart, java) // 判斷是否包含某個key print(map.containsKey("key")); // 輸出結果:false // 判斷是否包含某個value print(map.containsValue("key")); // 輸出結果:false // 添加一個新的元素進去 map['third'] = 'key'; print(map); // 輸出結果:{fisrt: dart, second: java, third: key} // 循環打印 代碼提示:Map.forEach((String, String) → void f) → void map.forEach( (key, value) => getMap(key, value) ); } void getMap(key, value){ print("key:${key}, value:${value}"); }
這個關鍵字就相似定義咱們在 JS 中定義變量的狀況。先看下面的代碼
void main(){ // a 的數據類型能夠隨意改變,這種類型就是 dynamic var a ; a = 10; a = "dart"; // 這裏咱們使用 dynamic 聲明 dynamic d = 10; d = 'dart'; }
原文地址:https://blog.csdn.net/qq_18948359/article/details/82749659