作為新一代程式語言, kotlin 不僅易懂也容易學, 他不但可以編譯成 JAVA (Kotlin JVM), Javascript (Kotlin JS), 還可編譯成原生系統的程式(Kotlin native),真的是一個相當優秀的程式語言架構,但它的編譯(compile)速度實在不敢恭維, 目前還有另一個相當優秀的程式語言 Dart 也值得學習,初看 Kotlin 與 Dart 的語法 , 型態宣告的方式有所不同,一個放在變數後面, 另一個則放在前面. 而DART 比較像是 c 語言的作法,將資料型態宣告放在變數前面
// Kotlin 的寫法 my.kt
fun main(args: Array <String> ) {
print("Hello");
}
// Dart 寫法 my.dart
main(List <String> args) {
print("Hello");
}
要玩 Dart 先到官方網站下載 dart SDK
https://www.dartlang.org/tools/sdk/archive
我下載 linux 64 位元 zip 版本的 Dart SDK 2.0.0:
https://storage.googleapis.com/dart-archive/channels/stable/release/2.0.0/sdk/dartsdk-linux-x64-release.zip
用 unzip 就可將它解壓縮, 再將解壓縮的目錄用 mv 指令改成 $HOME/dart, 寫程式免不了要用整合開發編輯器(IDE), VS code 就是一個開源的 IDE, 可到官方網站去下載:
https://code.visualstudio.com/Download
我選擇下載 linux 64 位元 .tar.gz 版本, 再使用 tar -xvf 解壓縮, 接著把目錄名稱用 mv 指令改成 $HOME/vscode,再寫個 bash script 設定好環境變數,將它存成 dartenv 檔案,方便以後使用:
#!/bin/bash
alias path='echo "$PATH"'
function pathadd() {
if [ -z "$1" ]
then
PATH=$PATH:$(pwd)
elif [ -d "$1" ]
then
PATH=$PATH:$1
fi
}
pathadd $HOME/vscode/bin
pathadd $HOME/dart/bin
開啟終端機, 執行上述文稿設定好 PATH 環境變數 :
. dartenv
執行 VS code 執行檔 code
code
在 VS code 側邊工具欄,有兩個常用的工具,其中禁止害蟲的標誌就是除錯工具(debug tool), 拼圖的標誌是擴充工具(extensions),先點擊擴充工具並搜索 Dart language, 找到後安裝它.或是隨便開啟一個用 dart 語法寫的文稿, 它會提示下載所支援的擴充工具,還蠻聰明的.另外可以安裝 Chinese(Traditional) 擴充工具將面板中文化,在 VS code 裏面就可以開始玩 Dart了.在面板上面有個綠色三角形按鈕(稱為 run button),點擊如果無法執行,它會提示修改 launch.json 設定檔,有可能是 "program": 的設定位置不對,我將它改成 "program": "my.dart" 並存檔,按下 run button 就可以執行 dart 了.
有了 VS code 搭配 Dart language 擴充工具, 編寫程式時,比較能寫出正確語法,一旦拼錯或語法錯誤就會顯示紅色漂浮底線,如果是警告會用綠色漂浮底線,提醒使用者要去修正或注意,除此之外,它對關鍵字的輸入預測還蠻準的,真的是一個非常實用的工具程式,值得試試.
後記 p.s.
1. VS code 左邊側邊欄工具,由上而下分別是: 搜索與取代(放大鏡), 檔案總管(檔案夾), 版本控制(流程圖), 除錯工具(禁止害蟲圖), 擴充工具(拼圖). 雖然 VS code 整合了 git 管理版本控制程式,但也必須明確告知該專案是否需要做版本控制. 當點擊版本控制工具時出現錯誤訊息,只要在該專案的目錄底下開啟終端機執行 git init 啟動 git 監控專案檔案的變化,就可以解決找不到 souce control 的問題 .
2. VS code下載擴充工具後,會將它放在 $HOME/.vscode/extensions 底下,可以自行備份
3. 習慣 c 語言或 Javascript 的應該可以很快能熟悉 dart 語法, 它們實在太像了,它的語法更像是 Javascript, 因此要習慣用 var 來宣變數的方式,讓 compiler 自動預測變數的資料型態,也避免寫錯, 與 c 語法相同的是每個表達式都必須用分號 ; 做結尾, 而函式也不需要像 Javascript 用 function 去作宣告,但所有變數都必須用 var 或是用像是 c 語言的語法明確指定資料型態方式來宣告(Javascript 不用 var 宣告時卻直接使用,恐會變成 gobal 變數, 當打錯字時,會無法發現錯誤,這是很危險的!), 用 var 宣告的好處是:多數時候不需明確指出變數的資料型態, Dart 2 可以根據上下文正確判斷出變數的資料型態
4. Dart 語言比 c 語言多了像是第 1 字母大寫 List, Map ... 等等的資料型態, List 可以用中括號 [ ] 將成員用逗號一一分開列表[value, ... ],而 Map 是字典資料型態, 它用大括號 { } 將成員使用冒號 : 成對搭配,並用逗號一一分開列表{key:value, ...}.兩者都可以透過 [ ] 取出其中單一成員.
5. Dart 的 lambda (希臘字母λ)函式用胖箭頭(fat arrow)來描述 ( ) =>等號左邊 ( ) 是輸入參數,箭頭右邊是輸出表達式(簡稱函式).
6. 使用 VS code 編輯 Dart 程式時 ,很多物件有內建成員函式(member function), 在 VS code 利用物件句點, 當打完句點時,就會出現成員的列表提示,使用上下鍵就可瀏覽,按下 Enter 鍵直接取用, 簡單的範例程式
// my.dart
main( ) {
var a = ["123", "456"]; //等同用 var a=List.of( ["123", "456"] ) 指定 a 是字串陣列
var b = {1:"one",2:"two"};//等同用 var b=Map.of( {1:"one", 2:"two"} ) 指定 b 是字典
var c = (x) => x+3 ; // 定義 λ(x)=x+3 指定 c 是 lambda 函式物件
var test = (a,b) => a==b ? "same object":"different object";//定義測試 λ(a,b)
var d=a // 沒有用建構函式,所以 d 只是 a 的別名(alias)
var f = ["123", "456"]; // 會使用 List 建構函式, 等於是 new List, 實體化另一個物件
a.forEach(print); // 用內建函式(member function forEach)將 a 的成員一一列印出來
for ( var i in b.keys ) // 使用 for 迴圈, i 必須用 var 宣告成變數,循序取出索引值 key
print( b[i] ); // 將 b 的成員一一列印出來, 字典可以用 [ ] 取出單一成員
print( c(3) ); // 列印出 c(3) = λ(3) 的函數值
print(d); // 列印 d 的物件
print( test(a,d) ); // 測試 a==d
print( test(a,f) ); // 測試 a==f
}
執行 dart my.dart 或是在 VS code 點擊 run 按鈕看輸出結果:
123
456
one
two
6
[123, 456]
same object
different object
沒有留言:
張貼留言