完成上一篇30天Flutter手滑系列 - 雙平台及IDE環境設定後,
開始要來寫點程式,是不是終於有點像在學個新技術了呢。
但是,別忘了Flutter是Dart語言,並不是Javascript(熱狗)也不是Java(狗),還是得來稍微認識一下有什麼不同。
透過以下官方範例我們來認識一下Dart語法與結構。
// Define a function.
printInteger(int aNumber) {
print('The number is $aNumber.'); // Print to console.
}
// This is where the app starts executing.
main() {
var number = 42; // Declare and initialize a variable.
printInteger(number); // Call a function.
}
// This is a comment.
註解的方法跟一般常見的程式語言一樣。
int
在傳進函數的變數需要定義型別,如果寫過TypeScript的朋友應該不陌生,只是這裡int
代表的是數字的資料型別,其他可定義的資料型別有String
, List
以及bool
。
42
一般的常數。
print()
用來輸出你想輸出的內容跟Javascript的console.log
類似。
'...' (or "...")
字串的表達式,跟Javascript一樣,單引號跟雙引號皆可通用。
$variableName (or ${expression})
這是在字串中引用變數的表達式,稱作樣板字面值(Template literals),用法可以參考MDN 樣板字面值或是官方文件關於String
的介紹。
這是一個很方便的使用技巧,可以讓你組合字串時畫面簡潔容易閱讀。
main()
每個app必須必備的函數方法,一切的入口,並且回傳會是void
。
var
這個跟Javascript一樣,宣告一個變數,但不會特別指定他的資料型別,其變數型別會取決於後來被賦予的值。
int
,若沒有指定資料型別的變數會被視為一個動態的型別,這個做法可以在編譯時更有效率。List<int>
代表一個整數型別的List(a list of integers)或是List<dynamic>
代表任意型別的List (a list of objects of any type)。main()
,同時支援在類別裡面定義函數(靜態及實例方法),也可以在方法定義方法成巢狀方式。public
、private
、protected
這些keywords,會在名稱前加入()表示為私有。這邊放上Dart1.9版列出的所有Keywords給大家參考
至於更具體詳細的變數,類別或是函數方法的編寫方式或範例,可以參考英文版或中文版。
最後我們用Flutter的Demo範例來複習一下Dart語法。
main()
是整個app的起始入口。MyApp()
,MyApp繼承自StatelessWidget,並定義了App名稱、標題及皮膚(theme)。屬於無狀態更新的類別。MyHomePage
類別,並且繼承自StatefulWidget,在這裡會利用狀態的改變來更新每次點擊按鈕的次數。_MyHomePageState
詳細定義了私有的常數 _counter
,增加計數器的方法_incrementCounter
。Scaffold
,這是flutter用來快速設計佈局的Widget,提供drawers、snack bars 和bottom sheets。ScaffoldState.showBottomSheet
控制。ScaffoldState.showSnackBar
控制。_counter
有更新時,會同步轉為字串顯示。_incrementCounter()
這個方法,進行計數器+1的動作。經過基礎的Dart介紹以及瀏覽過一遍範例程式,應該多少對Dart的寫法有點概念。
接下來我會從Flutter相關的UI Widget著手,試著以實際例子去介紹演練。