Kotlinのapplyの使い方!初期化処理を簡潔に書くコツ
生徒
「Kotlinって変数を初期化するコードがたくさん並ぶことがあって、ちょっと読みにくい気がするんですが…」
先生
「良いところに気づきましたね。Kotlinではapplyという機能を使えば、初期化処理をまとめて書いてコードをスッキリさせられるんですよ。」
生徒
「それ、ぜひ知りたいです!applyってどうやって使うんですか?」
先生
「では、初心者にもわかるようにapplyの基本から丁寧に解説していきましょう!」
1. Kotlinのapplyとは?初心者向けに簡単解説
Kotlin(ことりん)では、applyというスコープ関数を使うことで、オブジェクトの初期化処理をわかりやすくまとめることができます。
applyは、「そのオブジェクトに対して、いろいろ設定したいとき」に使うのがポイントです。
たとえば、箱の中に何かを詰めていく作業を想像してください。箱を作って、色を塗って、名前を書いて、中に物を入れて…とやることがいっぱい。でもapplyを使えば、「この箱に対して全部やるよ」とまとめて書けるんです。
2. applyの基本的な使い方と書き方
それでは、Kotlinでapplyを使う基本の形を見てみましょう。以下のようなコードになります。
fun main() {
val user = User().apply {
name = "田中"
age = 30
email = "tanaka@example.com"
}
println(user)
}
この例では、Userというクラスのインスタンスを作って、その中のname・age・emailの値をapplyの中で設定しています。
ポイントは、applyブロックの中ではthis(ジス)を省略して、そのオブジェクトのプロパティに直接アクセスできるところです。
3. applyを使わない場合との比較
同じことをapplyを使わずに書くと、こうなります。
fun main() {
val user = User()
user.name = "田中"
user.age = 30
user.email = "tanaka@example.com"
println(user)
}
処理がバラバラに見えますね。これが長くなると読みにくくなります。applyを使えば、初期化のかたまりをひとまとめにできて、パッと見て分かりやすくなるのです。
4. applyの戻り値と便利な特徴
applyの大きな特徴のひとつが「使ったあとに、もとのオブジェクトをそのまま返す」という点です。
つまり、変数に代入しながら初期化もできるのが魅力です。
たとえば、以下のように書けます。
val user = User().apply {
name = "佐藤"
age = 25
}
このコードは、「Userを作って、設定して、userに代入する」という流れを1行で完結させています。
5. applyを使ったUI部品の初期化例(初心者向け例)
次は、Androidアプリでよくある例を紹介します。たとえばボタンを作って、色やサイズを設定する処理です。
val button = Button(this).apply {
text = "送信"
textSize = 18f
setBackgroundColor(Color.BLUE)
}
Buttonというボタンを作って、文字や色を設定しています。applyを使えば、まとめて設定できて見やすいですね。
6. applyと他のスコープ関数との違い
Kotlinにはapply以外にも、似たような関数がいくつかあります。たとえばletやalsoなどです。
applyは「初期化・設定」にぴったりな関数です。letは結果を加工するとき、alsoはログを出すとき、など使い分けがあります。
ですが初心者のうちは、まずはapplyを「オブジェクトに対していろいろ設定したいとき」に使う、と覚えておけばOKです。
7. applyを使うときの注意点とよくある間違い
applyは便利ですが、むやみに使うと逆に読みづらくなることもあります。次のような点に気をつけましょう。
- 長すぎる
applyブロックは避ける(3〜5行くらいが目安) - オブジェクトの設定だけに使う(計算や分岐は避ける)
- 読み手が見てすぐに「これは初期化処理だ」と分かるように使う
コードは書く人だけでなく、読む人のことも考えて使うことが大切です。
8. Kotlin初心者がapplyを使う練習方法
Kotlinのapplyをマスターするために、次のような練習をしてみましょう。
- 自分で
Personクラスなどを作って、applyでプロパティを設定する - Androidの
TextViewやButtonなどのUI部品をapplyで初期化する - リストの中のオブジェクトに
applyで一括設定する
実際に書いてみることで、自然と使い方が身についてきます。