1. 程式人生 > >kotlin學習day10: 列舉和字串模板

kotlin學習day10: 列舉和字串模板

Kotlin-列舉

在 Kotlin中,列舉使用關鍵詞enum, enum class對應Java中的enum,Kotlin中,enum 又叫做軟關鍵詞(soft keyword):當它出現在 class 之前時,它就有了特殊的含義。但是你可以在其他地方把它當做常規名字來使用。另一方面,class依然是一個關鍵詞。你依然需要把變數命名為(class關鍵字以外的名
字) clazz 或aClass。像ava那樣,列舉型別並不是一個值的列表:你可以在列舉類中宣告屬性和方法。

宣告一個列舉:
 

enum class Color(
val r: Int, val g: Int, val
b: Int // 1 宣告列舉常量的屬性 ) { RED(255, 0, 0), ORANGE(255, 265, 0), // 2 當每個常量被建立時指定屬性值 YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255), INDIGO(75, 0, 130), VIOLET(238, 130, 238); // 3 分號(;)在這裡是必須的 fun rgb() = (r * 256 + g) * 256 + b // 4 在列舉類中定義了一個方法 }

列舉常量使用了跟在常規類中宣告建構函式和屬性同樣的語法。當宣告每一個列舉常量時,需要為常量提供屬性值。注意,這個示例中展示了 Kotlin 語法中唯一一處需要你使用分號的地方:如果你在列舉類中定義了任何方法,(請使用)分號將列舉常量列表從函式定義中分隔開來。

列舉類的簡單使用

模擬我們專案開發中最常用的一種場景:客戶端和伺服器約定幾種型別,然後不同的型別展示不同的樣式,在Java中,基本都會使用switch語句或者if-else表示式,但在Kotlin中,我們可以使用更加強大的when表示式,例如:根據輸入的color,我們輸出color的名字:

fun getColorName(color: Color) = // 1 直接返回一個when表示式
    when (color) { // 2 如果顏色等於列舉常量,返回對應的字串
    Color.RED -> "Richard"
    Color.ORANGE -> "Of"
Color.YELLOW -> "York" Color.GREEN -> "Grave" Color.BLUE -> "Battle" Color.INDIGO -> "In" Color.VIOLET -> "Vain" }

上面這樣使用了列舉常量的完整名稱,指定了Color列舉類名。當然我們也可以直接通過匯入常量值的方式來簡化程式碼:

頂層包匯入:

import com.example.admin.kotlindemo.Color.*

然後就可以通過名字來使用常量:

fun getWarmth(color: Color) = when (color) {
    RED, ORANGE, YELLOW -> "warm" // 3 通過名字來使用常量
    GREEN -> "neutral"
    BLUE, INDIGO, VIOLET -> "cold"
}

注:為什麼我們這裡函式體的定義直接使用了when表示式呢?因為kotlin中 when 是一個返回值的表示式,因此一個有表示式主體的函式可以直接返回when表示式

Kotlin-字串模板

讓我們來回憶一下Android開發中最常出現的一種場景:
假設我們有個User類

public class User {

    private int age;
    private String name;
    private int sex;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }
}

TextView要顯示他的基本資訊:
Java我們一般會拼接成字串或者使用格式化形式,例如:

 User user = new User();
 String sex;
 if (user.getSex() == 0) {
        sex = "男";
   } else {
       sex = "女";
  }
textView.setText(user.getName() + "的性別是:" + sex);

是不是很麻煩?但是在Kotlin中,我們只需要:

textview.text = "${user.name}的性別是${if(user.sex==0) "男" else "女"}"

以上的示例介紹了叫做字串模板的特性。在程式碼中,我們可以像很多指令碼語言一樣,在字串值中通過在變數名前面放置$字元來引用區域性變數或者表示式。這相當於Java的字串串拼接,但是更加緊湊和高效。當然,表示式是靜態檢查的。如果嘗試著去應用一個不存在的變數,程式碼不會通過編譯。如果你需要在一個字串中包含 $ 符號,你可以使用轉義功能: println(“$x”) ,列印 $x 但不會講 x 解析為變數引用。上面的使用字串模板的時候使用了一個簡單的表示式,並且在雙引號內部嵌套了雙引號,當然也可以僅僅使用表示式或者字串變數。