Kotlinのwithの使い方!レシーバーを切り替える使い方のポイント
生徒
「Kotlinのコードで、同じ変数に何度もアクセスしてると見づらくなることってありませんか?」
先生
「ありますね。そんなときに便利なのがwithという関数です。オブジェクトに対する処理をまとめて書けるんですよ。」
生徒
「それは便利そうですね!具体的にどんなふうに使うんですか?」
先生
「それでは、初心者にもわかるようにwithの使い方を説明していきましょう!」
1. Kotlinのwithとは?基本の考え方
Kotlin(ことりん)のwith関数は、特定のオブジェクトに対する処理をひとまとめに書くための強力なツールです。特に、同じ変数のプロパティや関数を何度も繰り返し使う場合、毎回その変数名を記述するのは冗長で、コードが長くなりがちです。
例えば、次のような場合を考えてみましょう。もし、ある変数のプロパティや関数を繰り返し使う必要がある場合、通常は毎回その変数名を付けて記述する必要がありますが、withを使うと、変数名を一度だけ指定するだけで、その後の処理ではthisを省略して使えるようになります。
具体的には、withを使うと、オブジェクトのプロパティや関数をそのオブジェクトに対して直接呼び出しているように見せかけることができ、コードがすっきりと簡潔になります。
たとえば、次のようなコード例を見てみましょう。もし、personというオブジェクトのプロパティを何度も使う場合、毎回person.名前やperson.年齢のように書くのは面倒です。しかし、withを使うと、オブジェクトを最初に指定するだけで、その中のプロパティやメソッドを簡潔に扱うことができます。
2. withの基本的な書き方と構文
withは、Kotlinでコードをより簡潔に書くための便利な構文です。特に、対象となるオブジェクトに対して複数回操作を行う場合に有用で、thisを省略して、コードをスッキリと書くことができます。
基本的な構文は次の通りです。
with(対象の変数) {
// この中でthisが省略できる
プロパティや関数を呼び出す
}
以下に、withを使ったシンプルな例を示します。初心者でも理解しやすいように、簡単な文字列操作を行っています。
fun main() {
val str = "Kotlin入門"
val result = with(str) {
// 文字列の長さを取得
println("文字数:${length}")
// 文字列を大文字に変換
println("大文字:${uppercase()}")
// 戻り値として文字列の長さを返す
length
}
// withブロックから返された戻り値を表示
println("戻り値:$result")
}
このコードでは、strという変数をwithブロック内で処理しています。length(文字数)やuppercase()(大文字化)を呼び出す際、thisを省略して簡潔に記述できます。また、withブロックの戻り値として、処理の結果である文字列の長さを返しています。
withを使うことで、対象の変数に対して複数の操作を行う際、繰り返し変数名を書く手間を省くことができます。これによりコードの可読性が向上し、メンテナンスもしやすくなります。
3. withとレシーバーとは?初心者向けに解説
レシーバーとは、「処理の対象となるオブジェクト」のことです。つまりwith(str)と書いたら、strがそのあとの処理の中心になります。
このレシーバーが一時的に切り替わることで、何度もstr.と書かなくても済むようになるわけです。
初心者でも、「この中ではstrが主役なんだな」と思えば、理解しやすくなります。
4. withの戻り値に注目しよう
with関数の中の最後の行の値が、戻り値として返されます。
さきほどの例でいうと、lengthが最後なので、その値がresultに入ります。
val result = with("Kotlin") {
println("処理中:$this")
this.length
}
println("長さ:$result")
このように、withは処理だけでなく、値の計算にも使えるんですね。
5. オブジェクトの初期化や整形にも使えるwith
withは、たとえば文字列の整形やオブジェクトの設定処理にも活用できます。
val message = with(StringBuilder()) {
append("こんにちは、")
append("世界!")
toString()
}
println(message)
この例では、StringBuilderを使って文字を追加し、最後に文字列として返しています。レシーバーがStringBuilderに切り替わっているので、毎回書く必要がありません。
6. withと他のスコープ関数との違い
Kotlinにはapplyやrunなど他にもスコープ関数がありますが、withの違いは次のとおりです。
withは関数として使い、レシーバーを指定して処理をまとめるapplyはオブジェクトの設定向き(主に初期化)runはオブジェクトから戻り値を得たいときに使う
初心者のうちは、withは「この中で対象をまとめて処理するもの」と覚えておきましょう。
7. withを使うときの注意点
withはとても便利ですが、以下のような注意点もあります。
- 処理が長くなりすぎると、どの変数が主役かわからなくなる
- ネスト(入れ子)にしすぎると、かえって読みにくくなる
- 読み手にとってわかりやすい長さに留める
シンプルに書ける範囲で活用するのがポイントです。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
8. Kotlin初心者がwithを練習する方法
初心者がwithの感覚を身につけるには、まず以下のような練習がおすすめです。
- 文字列やリストを
withで操作する StringBuilderで文を作る練習をする- オブジェクトの複数の値を処理するケースで使ってみる
まずは身近な処理からwithを使い、使い方に慣れていきましょう。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験