Kotlin Tutorial(4)基本型態與變數 << 前情
Kotlin提供基本的流程控制敘述,包含if、else if、else,大部份程式語言都會提供的switch,kotlin改為更加方變的when。除了跟一般程式類似的流程控制敘述,kotlin把if和when設定為「運算式」,對於應用程式很多需求,都可以簡化程式的設計。
if敘述
所有程式語言都會提供「if」這類敘述,用來執行基本的判斷與流程的控制,Kotlin提供下面的if語法:
if (邏輯運算式) {
邏輯運算式的結果為true,執行這裡的程式碼
}
[else if (邏輯運算式) {
邏輯運算式的結果為true,執行這裡的程式碼
}]
[else {
上面的判斷結果為false,執行這裡的程式碼
}]
應用程式依照流程的需求,使用if,或是搭配else if與else,執行需要的判斷與執行不同的工作,例如下面這個依照顏色代碼決定名稱的範例程式:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf01.kt */
package net.macdidi5.kotlin.ch05
fun main(args: Array<String>) {
// 字元型態的顏色代碼
val colorCode = 'R'
// 字串型態的顏色名稱
var colorName: String
// 判斷顏色代碼是否為紅色
if (colorCode == 'R') {
colorName = "Red"
}
// 判斷顏色代碼是否為藍色
else if (colorCode == 'B') {
colorName = "Blue"
}
// 判斷顏色代碼是否為綠色
else if (colorCode == 'G') {
colorName = "Green"
}
// 錯誤的顏色代碼
else {
colorName = "undefined"
}
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
如果if、else if或else需要執行的工作只有一行敘述,可以省略{與}:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf02.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
var colorName: String
if (colorCode == 'R')
colorName = "Red"
else if (colorCode == 'B')
colorName = "Blue"
else if (colorCode == 'G')
colorName = "Green"
else
colorName = "undefined"
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
if運算式
使用if敘述執行條件的判斷,根據判斷的結果執行不同的工作,是一般程式常見的應用。應用程式也經常根據判斷的結果,決定一個變數的值,例如上面根據顏色代碼的值設定顏色的名稱。所以Kotlin把if設計為一個可以傳回值的「運算式」:
if (邏輯運算式) {
邏輯運算式的結果為true,執行這裡的程式碼
使用運算式傳回結果
}
[else if (邏輯運算式) {
邏輯運算式的結果為true,執行這裡的程式碼
使用運算式傳回結果
}]
else {
把if當成運算式的時候,一定要使用else
上面的判斷結果為false,執行這裡的程式碼
使用運算式傳回結果
}
根據顏色代碼的值設定顏色名稱的範例,可以改寫為使用if運算式的寫法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf03.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
// 宣告變數指定的值為if運算式
val colorName =
if (colorCode == 'R') {
println("R => Red")
// if運算式傳回的值
"Red"
}
else if (colorCode == 'B') {
println("B => Blue")
// if運算式傳回的值
"Blue"
}
else if (colorCode == 'G') {
println("G => Green")
// if運算式傳回的值
"Green"
}
else {
println("other => undefined")
// if運算式傳回的值
"undefined"
}
println("colorCode: $colorCode, colorName: $colorName")
// 執行後顯示:
// R => Red
// colorCode: R, colorName: Red
}
如果if、else if或else只需要使用運算式回傳值,可以省略{與}:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf03.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
val colorName =
if (colorCode == 'R') "Red"
else if (colorCode == 'B') "Blue"
else if (colorCode == 'G') "Green"
else "undefined"
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
Kotlin沒有像Java程式語言的「?:」運算式,因為可以很容易使用if運算式執行同樣的工作,例如下面這個判斷數字大小的範例:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf05.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val x = 3
val y = 5
val max = if (x > y) x else y
// 顯示: x: 3, y: 5, max: 5
println("x: $x, y: $y, max: $max")
}
when敘述
除了基本的if敘述,程式語言另外提供「switch」敘述,執行單一變數值的相等判斷。Kotlin提供「when」執行與switch敘述類似的工作:
when (運算式,用來判斷的資料) {
值[,值...] -> 判斷的資料等於前面的值,執行這裡的程式碼
[...]
[else -> 判斷的資料不等於前面指定的值,執行這裡的程式碼]
}
前面使用if敘述判斷顏色代碼並設定顏色名稱的範例,可以改寫成使用when敘述的寫法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf01.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
// 字元型態的顏色代碼
val colorCode: Char = 'R'
// 字串型態的顏色名稱
var colorName: String
// 判斷顏色代碼變數值
when (colorCode) {
'R' -> colorName = "Red"
'B' -> colorName = "Blue"
'G' -> colorName = "Green"
else -> colorName = "undefined"
}
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
Kotlin的when敘述可以判斷多個值,如果需要考慮大、小寫的顏色代碼,可以使用下面的作法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf02.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'r'
var colorName: String
when (colorCode) {
// 使用多個值判斷大、小寫
'R','r' -> colorName = "Red"
'B','b' -> colorName = "Blue"
'G','g' -> colorName = "Green"
else -> colorName = "undefined"
}
// 顯示: colorCode: r, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
Kotlin的when敘述省略判斷資料的時候,必須在when敘述裡面使用邏輯運算式執行條件的判斷:
when {
邏輯運算式 -> 邏輯運算式的結果為true,執行這裡的程式碼
[...]
[else -> 邏輯運算式的結果為false,執行這裡的程式碼]
}
前面判斷顏色代碼並設定顏色名稱的範例,可以使用下面這個程式的作法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf02.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
var colorName: String
when {
colorCode == 'R' -> colorName = "Red"
colorCode == 'B' -> colorName = "Blue"
colorCode == 'G' -> colorName = "Green"
else -> colorName = "undefined"
}
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
when運算式
Kotlin把when設計為敘述與運算式兩種用法,下面是when運算式的語法:
when (運算式,用來判斷的資料) {
值[,值...] -> 判斷的資料等於前面的值,使用運算式傳回結果
[...]
[else -> 判斷的資料不等於前面指定的值,使用運算式傳回結果]
}
根據顏色代碼的值設定顏色名稱的範例,可以改寫為使用when運算式的作法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf03.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
// 宣告變數指定的值為when運算式
var colorName =
when (colorCode) {
'R' -> "Red"
'B' -> "Blue"
'G' -> "Green"
else -> "undefined"
}
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
when運算式同樣提供省略判斷資料的語法:
when {
邏輯運算式 -> 邏輯運算式的結果為true,使用運算式傳回結果
[...]
[else -> 邏輯運算式的結果為false,使用運算式傳回結果]
}
前面判斷顏色代碼並設定顏色名稱的範例,可以使用下面程式的作法:
/* net.macdidi5.kotlin.tutorial.ch05.HelloIf04.kt */
package net.macdidi5.kotlin.tutorial.ch05
fun main(args: Array<String>) {
val colorCode: Char = 'R'
// 宣告變數指定的值為when運算式
var colorName =
when {
colorCode == 'R' -> "Red"
colorCode == 'B' -> "Blue"
colorCode == 'G' -> "Green"
else -> "undefined"
}
// 顯示: colorCode: R, colorName: Red
println("colorCode: $colorCode, colorName: $colorName")
}
下一步
瞭寫使用if與when控制程式流程以後,接下來準備認識while、do-while與for三種迴圈,為應用程式加入執行重複工作的敘述,還有認識Kotlin方便、好用的範圍運算式。
相關的檔案都可以在GitHub瀏覽與下載。
http://github.com/macdidi5/Kotlin-Tutorial
後續 >> Kotlin Tutorial(6)迴圈與範圍
|