Kotlinのクラス拡張を完全マスター!拡張関数と拡張プロパティの使い方を初心者向けに解説
生徒
「Kotlinには『拡張関数』とか『拡張プロパティ』ってあるらしいんですけど、それって何ですか?」
先生
「いい質問ですね。Kotlinでは、元のクラスの中身を変えずに、新しい機能を追加できる仕組みがあるんですよ。それが『クラスの拡張』です。」
生徒
「クラスをそのまま変えないで機能追加? 難しそうだけど便利そう!」
先生
「初心者でも簡単に使えるテクニックなので、実際に使いながら覚えていきましょう!」
1. 拡張関数とは?Kotlinでメソッドを追加する方法
拡張関数(extension function)とは、既存のクラスに新しい関数を追加できるKotlinの機能です。元のクラスを変更しなくても、新しい機能を外から追加できます。
たとえば、String型に「びっくりマークを付ける」機能を足したい場合は、次のように書きます。
fun String.addExclamation(): String {
return this + "!"
}
これで、普通の文字列に対して次のように呼び出せます。
fun main() {
val message = "こんにちは"
println(message.addExclamation())
}
こんにちは!
2. thisの意味とは?初心者でも理解できる説明
thisは「このクラス自身」を指す特別なキーワードです。上の例でいうと、thisはStringの中身、「こんにちは」を表しています。
拡張関数を書くときは、fun クラス名.関数名()という書き方で定義し、thisで元の値を参照できます。
3. 拡張プロパティとは?値を追加できる便利な方法
拡張プロパティ(extension property)は、クラスに新しいプロパティ(値)を追加する機能です。ただし、値を保持することはできないので、基本的にはget()だけを使います。
val String.firstChar: Char
get() = this[0]
この例では、文字列の先頭の文字を返すプロパティを追加しています。
fun main() {
val word = "Kotlin"
println(word.firstChar)
}
K
4. 拡張関数とメンバー関数の優先順位
実は、同じ名前の関数が元のクラスにある場合、拡張関数よりも元のメンバー関数が優先されます。つまり、上書きはできません。
この点を理解しておくと、予期せぬ動作を防げます。
5. 拡張関数と拡張プロパティの活用例
Kotlinの拡張機能は、日常のプログラムでもよく使われます。例えば:
- 日時クラスにフォーマット関数を追加
- Listの合計や平均を求める関数
- 文字列の加工やチェック処理
クラスの設計を変えずに、あとから機能を「足していく」感覚で使えるので、初心者にもとても扱いやすいテクニックです。
6. Kotlin標準ライブラリにも使われている
実はKotlinの標準関数の多くも、この拡張関数として実装されています。たとえば:
val list = listOf(1, 2, 3)
println(list.joinToString())
このjoinToString()も、Listに定義された拡張関数です。
こういった便利な書き方ができるのは、Kotlinの拡張のおかげなんです。