在 Kotlin 中建立常量

David Mbochi Njonge 2023年1月30日
  1. 在 Kotlin 中使用類常量
  2. 在 Kotlin 中使用單例
  3. 在 Kotlin 中使用頂級常量
  4. 在 Kotlin 中使用包含常量的單獨檔案
  5. まとめ
在 Kotlin 中建立常量

常量用於儲存其值始終已知的資料,並且在程式執行期間資料不會改變。常量與變數的區別在於變數可以在程式執行期間改變資料。

例如,假設你正在開發一個摩托車模擬器。摩托車的不同特性在其整個生命週期中永遠不會改變,例如車輪的數量。

為確保車輪數量不變,我們在應用程式中宣告一個常量,並將其分配給摩托車可以擁有的車輪數量。我們使用常量來避免使用者輸入的錯誤,例如為摩托車提供四個輪子而不是兩個輪子。

在本教程中,我們將學習如何在 Kotlin 中建立常量、使用的命名約定以及如何將它們包含在你的應用程式中。

在 Kotlin 中使用類常量

轉到 IntelliJ 並選擇 File > New > Project 建立一個新的 Kotlin 專案。輸入 kotlinConstants 作為專案名稱或任何首選名稱。

在 Language 部分選擇 Kotlin,在 Build System 部分選擇 Intellij。按建立按鈕建立專案。

在 kotlin 資料夾下建立資料夾結構 com/constants。在 constants 資料夾下建立一個 Main.kt 檔案,並將以下程式碼複製並貼上到該檔案中。

package com.constants

class Car(private val name: String){
    /**
     * This is a constant that is only used
     * inside this class
     */
    private val numberOfWheels = 4
    /**
     * The companion object defines a constant
     * that exists only as a single copy and
     * Can also be used outside the class
     */
    companion object{
        const val NUMBER_OF_WHEELS = 4
    }
    fun showMessage(): String{
        return "A ${this.name} has ${this.numberOfWheels} wheels"
    }

}
fun main() {
    val nissan = Car("Nissan");
    println(nissan.showMessage());
    println("Number of wheels = ${Car.NUMBER_OF_WHEELS}");
}

我們在 Car 類中宣告瞭兩個常量;使用 private 關鍵字宣告的第一個常量僅用於此類,不能從類外部訪問。

至於命名約定,我們使用了駝峰命名約定,因為它只在類內部使用。

第二個常量在類的伴生物件中宣告。伴隨物件用於宣告屬於此類的常量和函式,這意味著它不能使用類物件例項化。

這些常量類似於 Java 中的靜態欄位和方法。為了呼叫常量,我們通常使用類,因為只存在一個常量副本。

伴隨物件內宣告的常量可以從類外部訪問,這些常量使用的命名約定是大寫字母和下劃線的組合。

主方法呼叫 Car() 建立一個新的 Car 物件。showMessage() 方法使用類中使用的常量將包含該值的訊息記錄到控制檯。

最後一條 println() 訊息記錄了使用伴隨物件宣告的常量的值。執行程式碼以驗證程式是否輸出以下內容。

輸出:

A Nissan has 4 wheels
Number of wheels = 4

在 Kotlin 中使用單例

單例是程式設計中的一種設計模式,尤其是在高階語言中。當我們有需要在應用程式中共享的資源以及建立資源成本高昂的情況時,使用單例設計模式。

請注意,當你使用單例時,在應用程式的整個生命週期中只會建立一個例項。

註釋前面的程式碼,將下面的程式碼複製貼上到註釋後的 Main.kt 檔案中。

package com.constants

object Configuration{
    const val USERNAME = "john"
    const val PASSWORD = "1234"
}

fun userLogin(user: String, pass: String): String{
    return "$user logged in with password $pass"
}

fun main() {
    println(userLogin(Configuration.USERNAME,
        Configuration.PASSWORD));
}

在這個例子中,我們使用 object 關鍵字建立了一個單例。當你想在 Kotlin 中建立單例時,請始終使用此語法。

在幕後,編譯器將建構函式設為私有,建立我們的 Configuration 的引用,並在靜態塊中對其進行初始化。只有在我們第一次訪問任何靜態欄位時,才會初始化單例。

userLogin() 是我們定義的用於使用單例屬性的自定義方法。要訪問這些值,我們呼叫單例名稱後跟屬性名稱。

這類似於我們對伴隨物件中宣告的常量所做的事情,但這種方法的資源密集度較低。執行程式碼並驗證程式是否輸出以下內容。

輸出:

john logged in with password 1234

在 Kotlin 中使用頂級常量

註釋前面的程式碼,將下面的程式碼複製貼上到註釋後的 Main.kt 檔案中。

package com.constants

const val CONNECTION_POOL = 10

class DBDriver{
   companion object{
       fun isConnectionExceeded(value: Int): Boolean{
           return (value > CONNECTION_POOL)
       }
   }
}

fun main() {
    println(DBDriver.isConnectionExceeded(11));
}

頂級常量不包含在函式、類或介面中,這意味著你可以從類外部呼叫它們而無需建立任何物件。

在此示例中,我們宣告瞭一個名為 CONNECTION_POOL 的頂級常量,並通過傳遞其名稱在 isConnectionExceeded() 方法中使用它。

執行程式碼並注意常量值像往常一樣被讀取以執行預期的計算,如下所示。

輸出:

true

在 Kotlin 中使用包含常量的單獨檔案

com​​ 資料夾下建立一個名為 consts 的新包。在 consts 資料夾下建立一個名為 NetConstants.kt 的檔案,然後將以下程式碼複製並貼上到該檔案中。

package com.consts

const val PORT = 8080
const val PROTOCOL = "DNS"
const val HOST_ADDRESS = "192.168.1.0"

上述檔案中定義的常量類似於頂級常量,但與其他應用程式部分在單獨的檔案中宣告。

以下示例顯示了在同一應用程式的單獨檔案中使用常量。註釋我們在 Main.kt 檔案中介紹的最後一個示例,並將以下程式碼複製並貼上到註釋後的檔案中。

package com.constants

import com.consts.HOST_ADDRESS
import com.consts.PORT
import com.consts.PROTOCOL

class Server{
   companion object{
       fun connectServer(port: Int, protocol: String, host: String): String{
           return "application connected to " +
                   "$host using port " +
                   "$port through" +
                   " $protocol"
       }
   }
}
fun main() {
    println(Server.connectServer(PORT, PROTOCOL, HOST_ADDRESS));
}

此示例定義了在類的伴隨物件中宣告的 connectServer() 方法。該方法使用我們在 NetConstants.kt 檔案中定義的三個常量。

這是通過將常量名稱傳遞給方法並將完全限定的常量名稱匯入類來實現的。以下是我們執行應用程式後的輸出:

application connected to 192.168.1.0 using port 8080 through DNS

まとめ

在本教程中,我們學習了在 Kotlin 應用程式中建立常量的不同方法。我們學習的方法包括:使用類常量、單例和頂級常量,最後,我們介紹瞭如何使用在單獨檔案中宣告的常量。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub