iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 8
0
Software Development

脫魯實錄之如何30天把到凱特琳(Kotlin)系列 第 8

要約 Kotlin 去哪玩好呢?? - 判斷式 if 和 when

  • 分享至 

  • xImage
  •  

脫魯實錄之如何30天把到凱特琳(Kotlin) - Day8

來到和 Kotlin 相處的第8天了
今天來講講判斷式 if 和 when

if、else if、else

if 字面上的翻譯就是 "如果..."
else if 可以翻成是 "要不然..."
else 就翻成 "再不然..."

所以換成程式邏輯的話會是

if(條件一){
      //如果條件一成立就執行區塊,反之繼續判斷條件二
}else if(條件二){
      //如果條件二成立就執行區塊,反之繼續判斷條件三
      //中間可以有好多個else if
}else if(條件三){
      //同上
}else{
      //如果以上的條件都不符合,就執行這個區塊
}

下面給個範例:

var score: Int = 85
var grade: String = ""
if(score<=100 && score>80){
    grade = "A"
}else if(score<=80 && score>=60){
    grade = "B"
}else{
    grade = "C"
}
println("Grade: $grade")
//所以印出的會是 Grade: A

有學過 Java 的同學一定覺得這就跟 Java 沒有什麼兩樣
是的!!上述的用法和範例都跟 Java 相同
但是!!
Kotlin 有著和 Java 不同的地方
那就是在 Kotlin 中的 if 是 "表達式" 而 Java 卻是 "語句式"
什麼是 "表達式" ??
表達式是可以有回傳值的,反之語句式是沒有回傳值的
剛剛上面的範例只印出分數範圍落在哪,現在可以做個延伸應用,仔細看 grade 的部分

var score: Int = 85
var grade: String = if(score<=100 && score>80){
    "A"
}else if(score<=80 && score>=60){
    "B"
}else{
    "C"
}
println("Grade: $grade")
//印出 Grade: A

甚至可以拿掉變數型態,變成:

var score: Int = 85
var grade = if(score<=100 && score>80){
    "A"
}else if(score<=80 && score>=60){
    "B"
}else{
    "C"
}
println("Grade: $grade")
//印出 Grade: A

再來 Kotlin 還可以在有返回值的 if 區塊中執行其他程式,只要你在該區塊中的最後一行返回值就可以
不過!!這點很重要!!如果要在該區塊執行其他程式的話,必須先給定返回值的變數型態
可以看看下面這個例子

var score: Int = 85
var grade: String = if(score<=100 && score>80){
    println("score<=100 && score>80")
    "A"
}else if(score<=80 && score>=60){
    println("score<=80 && score>=60")
    "B"
}else{
    println("score<60")
    "C"
}
println("Grade: $grade")
//印出
//score<=100 && score>80
//Grade: A

when

when 的用法和 if 很類似,一樣也是表達式,可以返回值
學會 if 再來學 when 就可以得心應手囉
when 的用法如下:

when{
    條件一 -> {
        //如果條件一成立就執行區塊,反之繼續判斷條件二
    }
    條件二 -> {
        //如果條件二成立就執行區塊,反之繼續判斷條件三,以此類推
    }
    else -> {
        //如果以上的條件都不符合,就執行這個區塊
    }
}

下面給個範例:

var score: Int = 85
var grade = ""
when{
    score<=100 && score>80 -> grade = "A"
    score<=80 && score>=60 -> grade = "B"
    else -> grade = "C"
}

剛剛說到 when 也是"表達式"
所以上面的範例也可以寫成:

var score: Int = 85
var grade: String = when{
    score<=100 && score>80 -> "A"
    score<=80 && score>=60 -> "B"
    else -> "C"
}

當然也可以去掉變數型態

var score: Int = 85
var grade = when{
    score<=100 && score>80 -> "A"
    score<=80 && score>=60 -> "B"
    else -> "C"
}

上一篇
跟 Kotlin 來個自我介紹 - 基本型態的練習與應用
下一篇
跟 Kotlin 去繞操場慢跑 - 迴圈 while 和 for
系列文
脫魯實錄之如何30天把到凱特琳(Kotlin)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chichi
iT邦新手 3 級 ‧ 2018-01-23 17:05:58

when 跟 if 是相同的?

感覺when是if的簡化版

lionlions iT邦新手 3 級 ‧ 2020-03-18 10:36:38 檢舉

恩也是用來取代java的switch喔~~~

我要留言

立即登入留言