初心者用kotlin

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は具体的な型ではなく、汎用的な型を意味しています。このクラスをインスタンス化する際に、実際の型をIntStringなどで指定します。

  • Box<Int>TIntとして扱います。
  • Box<String>TStringとして扱います。

こうすることで、Boxクラスは様々な型に対応できる柔軟なクラスとして設計されています。

ジェネリック型の利点

  1. 再利用性の向上
    同じクラスやメソッドを、異なる型に対して使い回すことができるため、コードの再利用性が高まります。

  2. 型安全性
    型キャストの必要がなくなり、型に関連するエラーをコンパイル時に防ぐことができます。


このようにジェネリック型を使用すると、柔軟で型安全なクラスを簡単に作成できるようになります。

Page 3 of 36.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626