iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
Software Development

Kotlin for Android系列 第 8

Day 08. Kotlin 語言學習 - 函式、判斷式、集合

線上 Kotlin 練習編譯器:https://try.kotlinlang.org/

  • 函式

  Kotlin 的函式 (function) 宣告以 fun 為關鍵字,架構接著依序為函式名稱、參數輸入區、回傳型態,跟作者慣用的 C# 有很大不同,以參數區來說 Kotlin 是先指定變數名稱再接上型態,若需回傳值則要在參數輸入區結尾加上回傳型態。函式也支援預設值指定,當呼叫時沒有輸入變數值時,會以函式上指定的值取代。

  下圖範例使用三個獨立的函式展示,第一個函式 doSomething() 示範無傳入/傳出的使用方式;第二個 calculateVolume() 示範計算總體積,其中有一個選擇性參數為 num,可以輸入複數數量做加乘;第三個 defaultString() 示範字串輸入參數也可指定預設值,左下角為執行結果。

https://ithelp.ithome.com.tw/upload/images/20181022/20111944o72CaEjxYh.png


  • 判斷式

  Kotlin 的判斷式 (conditional) if...else if...else 與其他語言的寫法都相同,如下列左側簡單展示,這邊就不多介紹,特別要講的是 when 類似於 C# 跟 JS 中 switch 的用法,最主要省去了 case 關鍵字及使用 -> 取代 : 符號,並用 else 代替 default,共用程式段的使用方式並非使用堆疊而是改以逗號處理。

https://ithelp.ithome.com.tw/upload/images/20181022/201119443TaS9bm0SX.png

  在使用 ifwhen 時,建議使用大括號區分每個條件,雖然在只有一行的情況,如:"A" -> println(“is A”) 下程式仍可正常執行,部分觀點認為單行在有前提的條件下(簡短的邏輯規則)閱讀起來比較直覺,另一部分認為在可維護性上抉擇後,還是用 {} 做一點劃分較佳(確保下一個來改程式的人不會出錯),以作者的習慣都會將它分開,有興趣可延伸閱讀內有關於此問題的討論。

  以官方範例來看,單行判斷式適合用於宣告變數時,需依照條件指定不同的值:

https://ithelp.ithome.com.tw/upload/images/20181022/20111944Wa1VPhU5tH.png


  • 集合

  Kotlin 的集合 (Colleation) 分兩種方式,一種是唯讀另一個則是可變動的,唯讀集合也是初始後就不能再新增、修改、刪除,在下圖展示中,也列了幾種常用到的方法或存取屬性,相關說明列於後方的備註部分。

https://ithelp.ithome.com.tw/upload/images/20181022/20111944StYmC34P1S.png

  以下範例是可變動清單進行新增、修改、刪除的示範,在 List 的示範中是用 <string> 型態解說,其實所有變數型態都能夠宣告於其中,甚至是混和不同型態的變數於同一個清單當中,這點就讓各位試試看。

https://ithelp.ithome.com.tw/upload/images/20181022/20111944vlKEvfizjC.png


  接著介紹的是 map,概念是 key : value 的對照表,下圖同時展示了幾種存取 [], getOrDefault(), .keys, .values 與判斷方法 containsKey, containsValue

https://ithelp.ithome.com.tw/upload/images/20181022/20111944z8aD23m9pu.png

  若需可變動則使用 hashMap,下圖中 put 用於新增,[key] = "" 用於更新值,remove 為移除,clear 為清除整個集合:

https://ithelp.ithome.com.tw/upload/images/20181022/20111944ikIR2BQThU.png


  以上的集合示範僅列出部分常用的方法,各位讀者可以在 IDE 上逐個使用看看呈現的結果,了解該集合支援哪些功能,在日後進行開發時,會很常利用到集合這個物件,今日的課程就到這邊,我們明天見!


資料參考

Control Flow: if, when, for, while - Kotlin Programming Language
https://kotlinlang.org/docs/reference/control-flow.html

Single statement if block-braces or no?
https://softwareengineering.stackexchange.com/questions/16528/single-statement-if-block-braces-or-no


上一篇
Day 07. Kotlin 語言學習 - Nullable 安全性
下一篇
Day 09. Kotlin 語言學習 - 迴圈控制
系列文
Kotlin for Android30

尚未有邦友留言

立即登入留言