kotlinのメモです。
1286 views
通常、配列を宣言する際には、要素の型を指定します。しかし、型に<Any>
を指定すると、異なる型の値を持たせることができます。これは、PythonやPHPのリストのように、さまざまな型の要素を混在させることができるコードを作成できるということです。
以下はその例です。
fun main(args: Array<String>) {
/* 通常の配列宣言 */
val normalArray: Array<Int> = arrayOf(1, 2, 3)
normalArray.forEach {
println(it)
}
/* 任意の型を持つ配列宣言 */
val genericArray: Array<Any> = arrayOf(1, "10", true)
genericArray.forEach {
println(it.toString())
}
}
1
2
3
1
10
true
map
でPythonっぽくAny
型を使うことで、Pythonのように「何でもあり」なデータ構造を作成することができます。Pythonであればこう書けますが、コンパイル言語でAny
型を使うと、なぜか少し不安に感じることがありますね。
fun main(args: Array<String>) {
var data: MutableMap<Any, Any> = mutableMapOf("keydesu" to "value desu", 1 to 2)
data.forEach {
println(it.key)
println(it.value)
}
}
この例では、キーと値に任意の型を持たせたマップを作成しています。
Kotlinでは、クラス自体をジェネリックにすることができます。これにより、クラスがさまざまな型に対応できるようになります。以下は、ジェネリック型クラスの例です。
/* ジェネリック型のクラス定義 */
class Box<T>(private val value: T) {
fun getValue(): T {
return value
}
}
fun main(args: Array<String>) {
/* Int型のBox */
val intBox = Box(10)
println(intBox.getValue()) // 出力: 10
/* String型のBox */
val stringBox = Box("Hello")
println(stringBox.getValue()) // 出力: Hello
}
上記のコードでは、Box
というクラスがT
という型パラメータを持っています。T
は具体的な型ではなく、汎用的な型を意味しています。このクラスをインスタンス化する際に、実際の型をInt
やString
などで指定します。
Box<Int>
はT
をInt
として扱います。Box<String>
はT
をString
として扱います。こうすることで、Box
クラスは様々な型に対応できる柔軟なクラスとして設計されています。
再利用性の向上
同じクラスやメソッドを、異なる型に対して使い回すことができるため、コードの再利用性が高まります。
型安全性
型キャストの必要がなくなり、型に関連するエラーをコンパイル時に防ぐことができます。
このようにジェネリック型を使用すると、柔軟で型安全なクラスを簡単に作成できるようになります。
Page 3 of 36.
すぺぺぺ
本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/