Kotlin で定数を作成する

David Mbochi Njonge 2023年1月30日
  1. Kotlin でクラス定数を使用する
  2. Kotlin でシングルトンを使用する
  3. Kotlin でトップレベルの定数を使用する
  4. Kotlin で定数を含む別のファイルを使用する
  5. まとめ
Kotlin で定数を作成する

定数は、値が常にわかっているデータを格納するために使用され、プログラムの実行中にデータが変更されることはありません。定数は、変数がプログラムの実行中にデータを変更できるという点で変数とは異なります。

たとえば、バイクのシミュレーターを開発しているとします。ホイールの数など、バイクのさまざまな特性は、その寿命全体にわたって変化することはありません。

車輪の数が変更されないようにするために、アプリケーションで定数を宣言し、それをバイクが持つことができる車輪の数に割り当てます。定数を使用して、2つではなく 4つのホイールをバイクに提供するなど、ユーザー入力によるエラーを回避します。

このチュートリアルでは、Kotlin で定数を作成する方法、使用される命名規則、およびそれらをアプリケーションに含める方法を学習します。

Kotlin でクラス定数を使用する

IntelliJ に移動し、[ファイル]>[新規]>[プロジェクト]を選択して、新しい Kotlin プロジェクトを作成します。プロジェクト名または任意の名前として kotlinConstants を入力します。

Language セクションで Kotlin を選択し、Build System セクションで Intellij を選択します。Create ボタンを押し、プロジェクトを作成します。

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 クラス内で 2つの定数を宣言しました。private キーワードを使用して宣言された最初の定数は、このクラスでのみ使用されることを意図しており、クラスの外部からアクセスすることはできません。

命名規則については、クラス内でのみ使用されるため、キャメルケースの命名規則を使用しました。

2 番目の定数は、クラスのコンパニオンオブジェクト内で宣言されます。コンパニオンオブジェクトは、このクラスに属する定数と関数を宣言するために使用されます。つまり、クラスオブジェクトを使用してインスタンス化することはできません。

これらの定数は、Java の静的フィールドおよびメソッドに似ています。定数のコピーが 1つしかないため、定数を呼び出すには通常、クラスを使用します。

コンパニオンオブジェクト内で宣言された定数には、クラスの外部からアクセスできます。これらの定数に使用される命名規則は、大文字とアンダースコアの組み合わせです。

main メソッドは、Car() を呼び出して新しい Car オブジェクトを作成します。showMessage() メソッドは、クラス内で使用される定数を使用して、値を含むメッセージをコンソールに記録します。

最後の println() メッセージは、コンパニオンオブジェクトを使用して宣言された定数の値をログに記録します。コードを実行して、プログラムが以下を出力することを確認します。

出力:

A Nissan has 4 wheels
Number of wheels = 4

Kotlin でシングルトンを使用する

シングルトンは、特に高級言語でのプログラミングのデザインパターンです。シングルトンデザインパターンは、アプリケーションで共有する必要のあるリソースがある場合や、リソースの作成に費用がかかる場合に使用されます。

シングルトンを使用する場合、アプリケーションの存続期間全体で 1つのインスタンスのみが作成されることに注意してください。

前のコードにコメントを付け、コメントの後に次のコードをコピーして 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 でシングルトンを作成する場合は、常にこの構文を使用してください。

舞台裏では、コンパイラーはコンストラクターをプライベートにし、構成の参照を作成し、静的ブロックで初期化します。シングルトンは、静的フィールドに最初にアクセスしたときにのみ初期化されます。

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 ファイルで定義した 3つの定数を使用します。

これは、定数の名前をメソッドに渡し、完全修飾された定数の名前をクラスにインポートすることで実現されます。以下は、実行後のアプリケーションの出力です。

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