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 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