Dart 簡介
Dart 是由 google 主導並開發的語言。可搭配也是 google 主導的 flutter 平台框架,一套程式可以開發 Android、iOS App、Web、桌面應用程式等等,並可應用在 Windows、macOS、Linux、Fuchsia(Google下一代作業系統)。看到這麼多的優點,未來錢途不可限量,開始來好好研究一下吧。
Dart 開發環境
在前篇 Flutter 安裝 macOS開發環境 安裝 Flutter 開發環境後就可以使用 Dart 語言。
但對於初學者而言,有現成的Dart平台,不需要這麼麻煩,要安裝語言環境才能開始學習,只要連上網路,就即可使用,那就是DartPad。
也可以先安裝Homebrew軟體後,再安裝Dart SDK
先在終端機安裝Homebrew 輸入下面指令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
接下來進行安裝 Dart SDK
brew tap dart-lang/dart brew install dart -devel
安裝後執行
brew info dart
驗證是否安裝正確
Dart官網也有針對各個OS有詳細的安裝說明。
開始學習
變數
使用 var 來宣告 變數
要注意的是,若一開始未給值,變數 default 為 null,之後可以變換為其他型態;
void main() { var name; print(name); name = 'Dragon'; print(name); name = 12345678; print(name); }
反之,若是一開始給值,之後就只能使用該值的型態,不能變換型態。
void main() { var name = 'Dragon'; print(name); name = 12345678; print(name); }
不過個人還是建議,任何變數一開始就制定好其型態。
void main() { String name = 'Dragon'; print(name); }
常數
若想設置常數,可以使用 final、const 進行修飾,只能被給值一次。而const 是編譯時的常數,所以若是要宣告成const 的纇(class),則必須加上 static,即 static const (順序不可顛倒)。而實體變數則是要宣告成 final 而不可以是 const。
void main() { const PI = 3.1415926; var radius ; radius = 5; final circumference = 2 *radius* PI; print(circumference); }
內建型別(Built-in types)
Dart 语言支持下列的类型:
numbers:分為兩種
int: 整數
double: 浮點數
var x = 1; //整數 var hex = 0xDEADBEEF; //整數 var y = 1.1; //浮點數 var exponents = 1.42e5; //浮點數 double z = 1; //浮點數Equivalent to double z = 1.0.
strings: 字串
void main() { var s = '字符串插值'; print('Dart 有$s,使用起来非常方便。'); //可用$帶變數到字串 print('Dart 有字符串插值' ',使用起来非常方便'); //可以用“”或‘’串字串 print('Dart 有字符串插值' + ',使用起来非常方便'); //可以用+串字串 print('使用${s.substring(3, 5)}表達式也非常方便。'); //可用${}處理字串 s = ''' 多行 字串'''; //使用 ‘’‘ 或 """ 展現多行字串 print(s); }
booleans: 布林值,使用 bool 關鍵字表示布林型態。布林值只有: true、false。
void main() { var t = true; var f = false; print(t); print(f); }
lists: 清單(arrays)類似矩陣
void main() { //宣告固定長度 var fixedList1 = new List(2); fixedList1[0] = 1; fixedList1[1] = 'a'; print(fixedList1); var fixedList2 = [1,2,3,"Hello",'World']; print(fixedList2); //宣告可變長度 var growableList = []; growableList.add("x"); growableList.add("y"); growableList.add("z"); print(growableList.length); print(growableList); growableList.forEach(print); }
sets:集合,集合中的元素是沒有順序且不能重複,因此不能使用索引值去取值(如set[0]),但可以列舉出來。
因為是集合,所以可以使用交集、聯集等等運算。
void main() { var colorSet1 = {'green', 'blue', 'yellow', 'red'}; var colorSet2 = {'red', 'black', 'white', 'yellow'}; print(colorSet1); for (var color in colorSet1) { print(color); //不可使用 colorSet1[0] } print("交集:"+colorSet1.intersection(colorSet2).toString()); print("聯集:"+colorSet1.union(colorSet2).toString()); print("差集:"+colorSet1.difference(colorSet2).toString()); }
maps: Map 是以 key-value的形式儲存,Map中的key是不可以重複,如果key不存在則回傳null。
void main() { var gifts = Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings'; print(gifts); var nobleGases = Map(); nobleGases[2] = 'helium'; nobleGases[10] = 'neon'; nobleGases[18] = 'argon'; print(nobleGases); var colorMap = { 'black': '#000000', 'yellow': '#FFFF00', 'white': '#FFFFFF', 'red': '#FF0000' }; print(colorMap['red']); }
runes: (用于在字符串中表示 Unicode 字符),要先安裝Characters package。
首先於 pubspec.yaml 檔案加上
dependencies: characters: ^1.0.0
安裝
接下來就可以import 來使用
mport 'package:characters/characters.dart'; void main() { var hi = 'Hi ??'; print(hi); print('The end of the string: ${hi.substring(hi.length - 1)}'); print('The last character: ${hi.characters.last}\n'); }
symbols:符號,表示操作符或者標識符。也許從來不會用到Symbol,但是該功能對於通過名字來引用標識符的情況是非常有價值的,特別是混淆後的代碼,標識符的名字被混淆了,但是Symbol的名字不會改變,下面列下例子:
//在標識符前加 # 前缀,來獲取Symbol //#radix //#bar void main() { print(#n == new Symbol('n')); //輸出:true var name = 'dragon'; Symbol symbol = #name; print(symbol); //輸出:Symbol("name") print(#name); //輸出:Symbol("name") print(name); }