Kotlin 的基礎語法

GivemepasS
6 min readJul 20, 2018

--

Kotlin 初體驗 中示範了一個簡單的 Kotlin 寫出來的 App, 接下來還是要先了解一下 Kotlin 基礎語法, 才能繼續走下去。

如果你想要測試一下編譯後的結果, 可以直接上官網有線上編譯器可以直接操作。

基本型態

如果你要宣告一個整數變數, 可以這樣宣告。

var i:Int = 0

如果你之前有學過 Java 很容易可以推斷出其他基本型態的寫法。

IntLongDoubleFloatStringBooleanChar

跟 Java 的差別就是第一個字是大寫

在 Kotlin 裡面, 其實型別是會自動判斷的, 也就是說你可以不用宣告後面的型態。

var i = 1
var s = "aaa"
val d = 1.0

var 與 val 的差異

如果你宣告成為 var 的變數, 那就代表裡面的值未來可以變化, 反之, 如果你宣告成為 val 代表著未來的這個變數是不能再修改值了

當你宣告成 var 之後是不能再改變變數的型態的, 譬如說

var v = 1
v = "sss"

這樣就會發生 Type mismatch 的錯誤。

當你宣告成 val 的時候, 如果一開始沒有初始化變數, 後面只需要確保有進行初始化的動作, 那麼就可以編譯通過。

val tmp
if(size > 0) {
tmp = "success"
}else {
tmp = "fail"
}

字串

宣告一個字串可以這樣寫

var s1 = "abc"

加入斷行符號

var s2 = "abc\ndef"
print(s2)

輸出會長這樣

abc 
def

如果你要把一個變數塞進字串, 則可以使用以下語法。

var s1 = "abc"
print("name is $s1")

輸出結果就會是長這樣

name is abc

如果你要在字串內進行運算, 則是要透過左右大括弧。

var i1 = 1
var i2 = 2
print("sum is ${i1 + i2}")

就會看到結果如下

sum is 3

也可以透過字串內的運算來呼叫方法。

var s1 = "abc"
var s2 = "def"
print("string is ${s1.plus(s2)})

結果如下

string is abcdef

Null機制

Tony Hoare 表示 Null 造成了數十億的損失, 長久以來, 開發者不斷的在程式內檢查 Null, 其實這個檢查本身就造成開發者很大的負擔, 除了程式長得很醜以外, 還會讓程式出現閃退, 開發者面臨崩潰的情況。

除此之外, 還要檢查邊界範圍、是否有空白(trim)等等…。因此通常會用 Android 內建的方法來檢查字串。

TextUtils.isEmpty(str)

在 Kotlin 也提供了相關的方法讓開發者方便使用, 以下是方法跟說明。

  • isNotEmpty 字串長度不等於 0 為 true 反之為 false
  • isNotBlank 字串長度為 0 或者字串不是空白為 true 反之為 false
  • isBlank 字串長度為 0 或者字串是空白字元組成為 true 反之為 false
  • isEmpty 字串長度為 0 則為 true 反之為 flase
  • isNullOrBlank 字串是 null 或者字串長度為 0 或全空白為 true 反之為 false
  • isNullOrEmpty 字串是 null 或者字串長度為 0 為 true 反之為 false

陣列

陣列可以這樣宣告

var array: IntArray = intArrayOf(1, 2, 3)

其實你也不需要宣告型態了, 因為後面都已經把型態標示出來, 就可以節省一些資訊。

var array = intArrayOf(1,2,3)

如同變數你可以宣告各種型態的陣列

var iArray = intArrayOf(1, 2, 3)
var fArray = floatArrayOf(1.0f, 2.0f, 3.0f)
var bArray = booleanArrayOf(true, false, true)
var cArray = charArrayOf('a', 'b', 'c')

你也可以透過建構子傳入想要傳入的個數。

var iArray = IntArray(3)

接著你就可以透過 index 的方式存取數值。

iArray[0] = 4
iArray[1] = 1
iArray[2] = 7

for 迴圈

走訪迴圈

如果你想要走訪整個陣列可以這樣寫。

var iArray = intArrayOf(1, 2, 3)
for(item in iArray){
print("$item ")
}

結果如下

1 2 3

如果你想要宣告字串陣列, 在 Kotlin 裡面就不是 stringArrayOf 這樣宣告了, 你必須透過 arrayOf 這個方法來進行宣告。

var sArray = arrayOf("abc", "def", "ght")

走訪迴圈列印出來

for(item in iArray){    print("$item ")
}

結果如下

abc def ght

for 迴圈取得索引值

for (i in iArray.indices) {
println("${iArray[i]}")
}

array 的 indices 方法就是拿出索引值, 因此透過存取 "${iArray[i]} 來存取到陣列內的值, 那你就會問為什麼要用大括弧來包覆呢? 因為它必須透過 iArrayindex 去存取值, 所以屬於運算的部分, 因此你必須透過大括弧包覆才能取到值, 否則只會取到 iArray[i] 所對應的位址而已。

for 迴圈範圍運算

除此之外你還可以透過範圍運算來達到指定數量, 例如你想要讓迴圈從1跑到100的累加, 那麼就可以透過範圍運算式達成。

var sum = 0
for(i in 1..100){
sum += i
}
print("sum is $sum")

結果如下

sum is 5050

也可以設定 step 屬性, 也就是說每次前進幾格, 假設我們設定 2+4+6+8+10 的結果。

var sum = 0
for(i in 2..10 step 2){
sum += i
}
print("sum is $sum")

那麼就會得到結果如下

sum is 30

另外還有一個屬性叫做 downTo, 它是用來倒數, 也就是說一開始是 1 到 10, 用了 downTo 屬性就會變成 10 到 1。

for(i in 10 downTo 2 step 2){
print("$i ")
}

結果如下

10 8 6 4 2

還有一個屬性叫做 until, 使用方法如下。

for(item in 1 until 10){
print("$item ")
}

它會除了最後一個以外的元素顯示出來, 結果如下。

1 2 3 4 5 6 7 8 9

--

--

No responses yet