Kotlinの拡張関数に引数を渡す方法を徹底解説!初心者向けのやさしい使い方
生徒
「Kotlinの拡張関数って、自分で作れるって聞いたんですが、引数も渡せるんですか?」
先生
「はい、Kotlinでは拡張関数に引数を渡すことができますよ。通常の関数と同じように書けるので、すごく便利です。」
生徒
「使い方がピンとこないです……簡単な例を見てみたいです!」
先生
「もちろんです。それでは、基本から丁寧に解説していきましょう!」
1. 拡張関数とは?初心者でも理解できるKotlinの特徴
Kotlin(コトリン)では、既存のクラスに自分で機能を追加できる拡張関数という仕組みがあります。これを使うと、標準の型(例えばStringやIntなど)に、自分だけの便利な関数を追加できるようになります。
例えば、「文字列を囲んで出力する機能が欲しいな」と思ったときに、自分で関数を定義して、まるでその型が元から持っている機能のように使えるのが拡張関数です。
2. 拡張関数に引数を渡すには?構文と基本の使い方
拡張関数に引数を渡す方法はとてもシンプルです。fun 型名.関数名(引数名: 型): 戻り値型のように書くだけです。まるで普通の関数と同じように、追加で引数を指定できます。
以下は、文字列の前後に好きな文字を足す拡張関数の例です。
fun String.addSurroundingSymbols(symbol: String): String {
return "$symbol$this$symbol"
}
fun main() {
val message = "Hello"
println(message.addSurroundingSymbols("*"))
}
このコードでは、「Hello」という文字の前後に「*」を追加して、「*Hello*」と出力します。
*Hello*
3. 引数の数を増やすこともできる!
引数は一つだけでなく、複数渡すことも可能です。次の例では、前後を別の文字で囲むようにしています。
fun String.decorate(left: String, right: String): String {
return "$left$this$right"
}
fun main() {
val title = "Kotlin"
println(title.decorate("<<", ">>"))
}
この場合、出力は以下のようになります。
<<Kotlin>>
このように、複数の引数を受け取ることで、より柔軟に文字列の加工や装飾ができるようになります。
4. 拡張関数にデフォルト引数を設定することも可能!
Kotlinでは、引数に初期値(デフォルト引数)を設定することができます。これにより、呼び出し時に引数を省略しても動作します。
fun String.wrap(symbol: String = "#"): String {
return "$symbol$this$symbol"
}
fun main() {
val word = "Hi"
println(word.wrap())
println(word.wrap("@"))
}
出力結果は以下のようになります。
#Hi#
@Hi@
このように、引数がない場合はデフォルトの「#」が使われ、ある場合はその引数が優先されます。
5. 拡張関数はどんな型にも使える!文字列以外の例も見てみよう
拡張関数は文字列に限らず、Int(整数)やList(リスト)など、様々な型にも定義できます。次はInt型に対して、指定した数を足す拡張関数です。
fun Int.plusNumber(add: Int): Int {
return this + add
}
fun main() {
val num = 10
println(num.plusNumber(5))
}
出力は以下の通りです。
15
thisというキーワードは、拡張対象のインスタンス自体を指しています。この例では、numがthisにあたります。
6. 拡張関数にラムダ式を渡すこともできる!
Kotlinでは、関数の引数としてラムダ式(関数のかたまり)も渡すことができます。例えば、次のように、文字列を加工する処理を外から渡すこともできます。
fun String.modify(transform: (String) -> String): String {
return transform(this)
}
fun main() {
val text = "kotlin"
val result = text.modify { it.uppercase() }
println(result)
}
この場合、「kotlin」がすべて大文字の「KOTLIN」になって出力されます。
KOTLIN
このように拡張関数にラムダ式を渡すと、使い方の幅が広がり、自由なカスタマイズが可能になります。
7. 拡張関数はコードをきれいに保つ便利な道具
拡張関数を使うことで、コードの見通しがよくなり、再利用性も高まります。また、通常の関数と同じように引数を渡せるので、「関数型プログラミング」の入門としても学びやすいです。
また、Kotlinの学習やAndroidアプリ開発でもよく使われるテクニックなので、早いうちから慣れておくと後々役立ちます。
まとめ
Kotlinの拡張関数と引数の考え方を総復習
この記事では、Kotlinにおける拡張関数の基本的な仕組みから、引数を渡す方法、複数引数やデフォルト引数、さらにラムダ式を引数として受け取る応用的な使い方まで、段階的に解説してきました。 拡張関数は、既存のクラスを直接変更せずに、新しい機能を追加できるというKotlinならではの便利な仕組みです。 特に初心者にとっては、「クラスを作り直さなくていい」「コードがすっきりする」という点が大きな魅力になります。 文字列操作や数値計算など、よく使う処理を拡張関数としてまとめておくことで、同じ処理を何度も書く必要がなくなり、コードの可読性と保守性が大きく向上します。
引数を渡せることで拡張関数はさらに実用的になる
拡張関数は、見た目こそ特別な書き方に見えますが、引数の扱い方は通常の関数とほぼ同じです。 そのため、引数を一つ渡すだけでなく、複数の引数を使って柔軟な処理を書くことができます。 例えば、文字列を装飾したり、数値に別の値を加えたりといった処理も、拡張関数として定義しておけば、 あたかも元から用意されていたメソッドのように自然に呼び出せます。 Kotlinのコードが読みやすいと感じられる理由の一つは、この「自然な書き方」にあります。
デフォルト引数とラムダ式で表現力が広がる
デフォルト引数を使えば、拡張関数の呼び出し方に幅を持たせることができます。 よく使う値をあらかじめ設定しておくことで、呼び出し側のコードを簡潔に保つことができ、 必要な場合だけ引数を指定するという使い分けが可能になります。 また、ラムダ式を引数として受け取る拡張関数は、処理内容を外から自由に差し替えられるため、 Kotlinらしい柔軟なプログラム設計につながります。 これらの機能を理解しておくことで、拡張関数は単なる便利機能ではなく、 実践的なプログラミング技術として活用できるようになります。
拡張関数を使うことでコード全体が整理される
拡張関数を上手に使うと、処理の意図がはっきりとしたコードを書くことができます。 例えば、「文字列を加工する」「数値を計算する」といった意味のある処理を関数名として表現できるため、 main関数や業務ロジックの中身がとても読みやすくなります。 KotlinやAndroid開発の現場でも拡張関数は頻繁に使われており、 学習段階でしっかりと理解しておくことで、後々の学習がスムーズになります。 初心者のうちは小さな処理から拡張関数として切り出し、少しずつ慣れていくのがおすすめです。
まとめとしてのサンプルプログラム
fun String.repeatWithSeparator(count: Int, separator: String = "-"): String {
return buildString {
for (i in 1..count) {
append(this@repeatWithSeparator)
if (i != count) {
append(separator)
}
}
}
}
fun main() {
val word = "Kotlin"
println(word.repeatWithSeparator(3))
println(word.repeatWithSeparator(3, "*"))
}
このサンプルでは、拡張関数に複数の引数とデフォルト引数を組み合わせています。 buildStringを使うことで、処理の流れも分かりやすくなり、実用的な拡張関数の形になっています。 このような書き方を覚えておくと、日常的な文字列操作がとても楽になります。
生徒「拡張関数って、引数を渡せるだけでこんなに便利になるんですね」
先生「そうですね。普通の関数と同じ感覚で使えるのがポイントです」
生徒「デフォルト引数やラムダ式も使えるのが印象的でした」
先生「そこまで理解できていれば十分です。実際の開発でも役立ちますよ」
生徒「まずはよく使う処理を拡張関数にしてみます」
先生「それが一番の近道です。Kotlinらしい書き方にどんどん慣れていきましょう」