Kotlinのrunの使い方!スコープ内で処理をまとめるテクニック
生徒
「Kotlinで一つの変数を使って、いろいろな処理をまとめて書きたいときってどうすればいいですか?」
先生
「そんなときに便利なのがrunというスコープ関数です。同じオブジェクトを使った処理をひとまとめにできて、コードがすっきり読みやすくなりますよ。」
生徒
「スコープ関数ってなんですか?難しそう…」
先生
「安心してください。初心者でもわかるように、runの使い方を基本から丁寧に説明していきますね!」
1. Kotlinのrunとは?
Kotlin(ことりん)のrunは、スコープ関数(すこーぷかんすう)という便利な機能のひとつです。
スコープ関数とは、「特定の変数やオブジェクトの中で、いろいろな処理をまとめて実行する」ためのものです。
runは、「この中で変数に対して何か処理したい」というときに、まとめて書けるという特徴があります。
まるで「お弁当箱におかずを詰めるように」、一つの箱(オブジェクト)の中に処理を入れていくイメージです。
2. runの基本的な使い方
それでは、runの基本的な使い方を見てみましょう。以下のように書きます。
fun main() {
val result = "こんにちは".run {
println(this)
this.length
}
println("文字数: $result")
}
このコードでは、文字列「こんにちは」に対してrunを使っています。
thisは「自分自身(ここでは文字列)」を指していて、this.lengthで文字数を取得しています。
最後の行でrunの戻り値をresultに入れて表示しています。
3. runを使うと何が便利なの?
runを使うメリットは、処理をグループ化できる点です。
例えば、次のようなコードがあるとします。
val text = "Kotlin"
val upper = text.toUpperCase()
val length = text.length
val message = "文字数は $length"
これをrunを使ってひとつにまとめると、以下のように書けます。
val message = "Kotlin".run {
val upper = this.uppercase()
val length = this.length
"文字数は $length"
}
このように、一つの文字列に対する処理をrunの中にまとめて書けるので、読みやすく整理されたコードになります。
4. runの戻り値を活用しよう
runは、ブロックの最後の値を「戻り値」として返します。
たとえば、次のように計算処理にも使えます。
val result = run {
val a = 10
val b = 20
a + b
}
println(result)
この例では、a + bの結果(30)がrunから返され、resultに入ります。
わざわざ変数を定義する必要がなく、必要な処理だけをrunの中に書いて済ませられるのが便利なポイントです。
5. runとapplyとの違いは?
runとapplyは似ていますが、目的が少し違います。
applyは「オブジェクトの設定・初期化」に使うrunは「処理をまとめて、最後に値を返したいとき」に使う
初心者のうちは、applyは「準備」、runは「実行」と覚えると良いでしょう。
6. nullを扱うときにも使えるrun
Kotlinでは、null(ぬる)=「値が存在しないかもしれない」ものに対して安全に処理をする方法があります。
例えば、以下のような書き方ができます。
val name: String? = "山田"
val result = name?.run {
"こんにちは、$this さん!"
}
println(result)
nameがnullでなければ、runの中が実行されます。
これは「null安全呼び出し」といい、Kotlinの大事な機能のひとつです。
7. Kotlin初心者がrunを使うときの注意点
runは便利ですが、以下のポイントに注意しましょう。
- 処理を詰め込みすぎると読みづらくなる
- 戻り値があるので、何を返すか明確にする
- 複雑なロジックよりも、シンプルな処理に使うのが効果的
読みやすさと意図の明確さを意識して使えば、コードの質がぐんと上がります。
8. runを使った練習課題をやってみよう
Kotlinのrunを理解するには、実際に手を動かすのが一番です。
- 文字列に対して
runで長さや内容をチェックする - 複数の数値計算を
runでまとめる - nullの可能性がある変数に
runを使って安全に処理する
まずは簡単な例から練習して、少しずつ慣れていきましょう。