定義變數
範例:定義一個變數名稱為name的String,並將”Andy”設為初始值。
var name : String = "Andy"
由上方的範例中,可以分為幾個部分:
- var:變數定義關鍵字
- name:變數名稱
- String:類型定義
- =:設定運算子
- “Andy”:設定值
變數定義關鍵字
在Kotlin中,變數定義關鍵字有兩個,一個是var,另一個則是val。那麼這兩種關鍵字有什麼差別呢?
簡單分辨,var用來設定可以被修改的變數,val用來設定不可以被修改的變數。
不過,在某些時候,val的值也是可以被修改的。如果要使用絕對不會被修改的數值,就必須使用編譯時期的常數。
編譯時期的常數
例:
const val MAX_VALUE = 100
有幾點需要注意:
- 定義在函式之外,包含main()函式。因為邊編譯時期的常數需要在編譯的時候派值,但是main()及其他函式是在執行時才呼叫,函式內的變數也是在那時候才派值。
- 只能使用基本類型:String
- Int
- Double
- Float
- Long
- Short
- Byte
- Char
- Boolean
3. 一般使用全大寫+底線命名。
變數名稱
任意命名,一般都是以小駝峰命名法(lower camel case)。(首字母小寫,第二個單字以後的開頭字母用大寫,不使用底線分隔)
例如:
- isValid
- numberOfMonth
- firstName
類型定義
在Kotlin中,可以分為下列幾種基本資料類型,
- Number: Byte, Short, Int, Long, Float, Double
- Boolean
- String
- Char
- List
- Set
- Map
在Java中,資料類型有兩種:參照類型與基礎類型,參照類型有對應的原始碼定義;基礎類型則不需要原始碼定義。
參照定義的名稱都是以開頭大寫。至於為什麼在Java需要使用參照類型與基礎類型呢?因為某些Java的語言特色只能使用參照類型,另外,參照類型更利於支援Java某些物件導向的特色。基礎類型的優點在於效能比較好。
回到Kotlin,上面列出的基本資料類型全部都是 參照類型。
那麼為什麼Kotlin只有提供參照類型呢?
- 只有一種才不會選錯XD
- 基於更高效能的需要,Kotlin編譯器會在Java位元碼中,改用基礎資料型態。
類型推斷與靜態類型系統
- 類型推斷
// Java
String name = "Andy";//Kotlin
var name : String = "Andy"//Kotlin 類型推斷
var name = "Andy"
學過Java的人會覺得Kotlin類型寫在後面怪怪的,因為Kotlin有類型推斷的功能,在定義變數的同時,如果直接加上初始值,那麼Kotlin就會知道該變數是什麼類型,甚至連IDE都會請你把類型移掉。
- 靜態類型系統
在定義變數的同時,如果有加上類型,當設定的值不符合其類型,就會立刻提醒碼農們,我們就可以在編譯程式之前就發現問題。
例:
小結
一般情況之下,如果不需要修改變數,則一律使用 val 來定義變數。
在Kotlin中,如果有定義初始值,則不一定需要同時定義型別,但是如果有定義型別,Kotlin會在您輸入的同時檢查您的輸入是否與定義型別相同(靜態類型系統)。
Kotlin都是使用參照類型,由Kotlin編譯器決定轉成Java位元碼之後,需要使用什麼類型。
感謝大家收看,謝謝
參考
KotlinLang.org: Basic Types
讀書會連結:https://tw.kotlin.tips/study-jams/2