2019年2月4日 星期一

dart 基礎

參考資料: https://www.dartlang.org/guides/language/language-tour
重要概念:
1. 宣告成變數的都可成為物件, 所謂物件就是 class 的實體化,它們最終都繼承自 Object.
2. dart 是強型別的語言, 用 var 宣告變數, 而函數雖然可以選擇性的不用標註類型, 但最終從上下文可推斷出適當的類型, 如果要明確認定變數或函數適應各種類型,可以宣告成 dynamic.
3. dart 使用角括號支援廣泛類型,像是 List <int> 或 List <dynamic>, 可以區分出它是列舉整數或者列舉各種類型
4. dar t 允許區域性巢狀函式宣告, 例如在 main( ) 函式內也可以宣告內部函式, 類似把函式放在 class 當成方法
5. dart 在識別字用底線 _ 宣告成私有變數
6. dart 區分陳述值(expressions)別於陳述式(statements)在於 expressions 帶有運算元及運算子, 在執行時會產生一個明確數值,例如條件陳述式  (condition) ? true:false;根據條件產生一個 true 或 false 的陳述值, 而另一種條件陳述式 varName ?? value; 則是當 varName 是 null 時採取 value 的值, 否則套用  varName 本身的值, 等同用 (varName==null) ? varName:value; 縮寫的陳述值
7. dart 產生警告及錯誤兩種報告, 警告是說程式碼也許無法正常運作,但並不會禁止,但如果是在編譯時產生錯誤,就會禁止程式運行,如果在執行期產生錯誤就執行例外程式碼.
8. 底下列出 dart 內建的特殊關鍵字,不得當作變數的識別字:
    absrtract, as, assert, async, await
    break
    case, catch, class, const, continue, covariant
    default, deferred, do, dynamic
    else, enum, export, extends, external
    factory, false, final, for, Function
    get
    hide
    if, implements, import, in, interface, is
    library
    mixin
    new, null
    on, operator
    part, rethrow, return
    set, show, static, super, switch, sync
    this, throw, true, try, typedef
    var, void
    while, with
    yield
9. 如果是透過類型建構式實體化的物件常數就必須用 final 而不是 const.
10. 內建資料類型的關鍵字: num, int, double, bool, String, List, Map, Runes
11. 宣告類型關鍵字: dynamic, var, final, const, void
12. 數值關鍵字: true, false, null
13. 數學運算: +(加法), -(減法), *(乘法), /(除法), %(餘數), ~/(商數), ++(累加一), --(累減一)
14. 比較運算: <(小於),>(大於), <=(小於或等於), >=(大於或等於), ==(等於), !=(不等)
15. 邏輯運算: &&, ||, !
16. 類型測試: is, is!
17. 位元運算: ~, &, |, ^, >>, <<
18. dart 的函式可以推斷出函數的類型, 簡短函式可以用胖箭符來宣告.
19. 可忽略的參數傳遞,可以用中括號 [ ] 括起來, 預設參數值用等於符號 = 去指定預設值,兩者可互相搭配.
20. 當函式沒有用 return 傳回數值時, dart 仍會傳回 null 這個數值.
21. 類型內可供定義的運算元(operator).  != 其實就是 !( op1 == op2), 因此 != 無須重定義
    數學運算:  +(加法), -(減法), *(乘法), /(除法), %(餘數), ~/(商數)
    比較運算: <(小於),>(大於), <=(小於或等於), >=(大於或等於), ==(等於)
    位元運算: ~(NOT), &(AND), |(OR), ^(exclusiveOR), <<(shiftLEFT), >>(shiftRIGHT)
    陣列索引的 getter 參數是一個索引值: operator  [ ] (index)  { return readValue; }
    陣列索引的 setter 參數則有兩個: operator  [ ]= (index, value) { varWrite = value;  }
22. 新類型宣告關鍵字(class, abstract class, mixin)及類型附屬關鍵字(on, with, extends, implements):
       class  superClass { superClass( ){ }; }// 有建構式的正常類型
       abstract class abstractClass { }// 抽像方法類型, 只有框架, 用於繼承或實現或混合的類型
       class childClass1 extends abstractClass { }// 繼承自抽象類型
       class childClass2 implements abstractClass { }// 實現抽象方法的類型
       class childClass3 extends superClass implements abstractClass { }// 繼承並實現類型
       所謂 mixin (可混型)是一個只有方法(method)和特性(property)但不含建構式的抽象類型, abstract class  不可實體化, 但透過 class 宣告搭配  with 可以層層堆疊混型產生新類型:
       class multiMixin with downMixin, topMixin { }
       多重堆疊混型時, 若內部成員名稱相同, 後者覆蓋前者, 大括號內成員經堆疊後優先權最高. 
23. 類型內定義的靜態(static)成員無須實體化(透過建構式產生物件)就可直接加句點語法取用, enum 實際上就是一個簡化的靜態成員類型, 例如像是 enum colorClass {red, green, blue } 大括號內使用逗號將成員組成的有限集合類型

沒有留言: