Genta Hirauchi

公開日:2020/02/01
更新日:2020/03/22

【Kotlin基礎】スコープ関数alsoの実装方法と用途を解説

メインコンテンツへスキップツールバーへスキップ WordPress について Genta Hirauchi 21件の WordPress 更新, 翻訳の更新 00件のコメントが承認待ちです。 新規 投稿を表示 SEO こんにちは、Genta さん ログアウト ヘルプ表示オプションWordPress 5.3.2 が利用可能です ! 今すぐ更新してください。 投稿の編集 新規追加 Warning: All in One SEO Pack has detected that you are blocking access to search engines. You can change this in Settings > Reading if this was unintended. Update Reading Settings Remind me later この通知を非表示にする 投稿を更新しました。 投稿を表示 この通知を非表示にする ここにタイトルを入力 【Kotlin基礎】スコープ関数alsoの実装方法と用途を解説 パーマリンク: http://localhost/app/kotlin-also/ ‎編集 メディアを追加 Add Galleryビジュアルテキスト
  • alsoの実装方法が知りたい。
  • alsoはどんな時に使うと便利なの?
  • also以外のスコープ関数について知りたい。

Kotlinにはスコープ関数という覚えておくと便利な関数があります。

スコープ関数にはいくつか種類があるのですが、本記事では、スコープ関数alsoに焦点を当て解説致します。

他のスコープ関数につきましては、簡単な解説と、詳細をまとめた記事へのリンクがありますので、そちらをご覧頂けたらと思います。

目次

スコープ関数alsoの実装方法と用途について

alsoの基本的な使い方

スコープ関数alsoは、公式ドキュメントで以下のように定義されております。

  • Kotlin
inline fun  T.also(block: (T) -> Unit): T

【公式ドキュメント】 : also – Kotlin Programming Language

公式ドキュメントの説明文には、「Calls the specified function block with this value as its argument and returns this value.(この値を引数として指定された関数ブロックを呼び出し、この値を返します。)」と記されています。

もう少しイメージしやすい形にすると、以下のようになります。

  • Kotlin
結果 = レシーバー.also {
   // 処理
}

レシーバーにはオブジェクトが入ります。説明文の「この値」というのが、このレシーバーに該当します。

説明文の「関数ブロック」というのは、alsoの後の { // 処理 } の部分に該当します。
また、関数ブロック{ }内では、レシーバーをitで参照することができます。

そして、「この値を返します」とあるように、レシーバーを返却します。

まだalsoがどのような処理を行うのか良くわからないと思いますので、実際の処理の流れをサンプルコードで見ていきましょう。

  • Kotlin
class User {
   var name: String = ""
   var age: Int = 0
}

val result = User().also {
   it.name = "伊藤"
   it.age = 30
}

println("私は${result.name}、${result.age}です。)

// "私は伊藤、30才です。

User()でUserクラスのインスタンスを生成すると同時に、alsoでUserのパラメータに値を代入しております。

itは、ブロック処理後にレシーバー自身を返すので、変数resultには、パラメータに値が代入されたUserが格納されることになります。

ブロック{ }内では、レシーバーは暗黙的にitで参照できますが、任意の変数で参照することもできます。

  • Kotlin
val result = User().also { user ->
   user.name = "伊藤"
   user.age = 30
}

userという変数でレシーバーを参照するように変更しました。
このようにレシーバーを参照する変数を明示した場合は、itは使用できなくなるので注意が必要です。

Point
  • alsoを呼び出すオブジェクトをレシーバーと呼ぶ
  • ブロック{ }内では、itでレシーバーを参照できる
  • itではなく、任意の変数でレシーバーを参照することもできる
  • alsoはブロック処理後、レシーバー自身を返す

alsoの具体的な使用用途

alsoは、オブジェクトに対してまとめて処理を行う場合に使うと便利です。

■ コードで動的にViewを実装する

  • also使用
  • also未使用
findViewById(R.id.container).also {
   it.orientation = LinearLayout.VERTICAL

   val textView = TextView(this).also {
       it.text = "テキストが入ります。"
       it.textSize = 18f
       it.textAlignment = TextView.TEXT_ALIGNMENT_CENTER
   }

   it.addView(textView)
}
val container = findViewById(R.id.container)
container.orientation = LinearLayout.VERTICAL

val textView = TextView(this)
textView.text = "テキストが入ります。"
textView.textSize = 18f
textView.textAlignment = TextView.TEXT_ALIGNMENT_CENTER

container.addView(textView)

alsoを使用した方が、各Viewのまとまりや親子関係がわかりやすいですね。

またalsoには、nullチェックをした上で、安全にオブジェクトにアクセスすることができるという利点もあります。

■ nullチェックをした上で、処理を行う

  • Kotlin
val nullTextView: TextView? = null

nullTextView?.also {
   it.text = "テキストが入ります。"
   it.textSize = 18f
   it.textAlignment = TextView.TEXT_ALIGNMENT_CENTER
}

nullTextViewは、nullです。
このnullTextViewに対し、「?.」というものが付いています。これはセーフコール演算子と呼ばれるもので、変数がnullでなければ変数にアクセスするという役割を持っています。

このセーフコール演算子とalsoを組み合わせることで、Nullableな変数に対して、安全にアクセスすることができます。

Point
  • alsoは、オブジェクトにまとめて処理を行う際に便利
  • ?. をセーフコール演算子と呼ぶ
  • ?.also { }で、nullでないことを確認し、安全に処理を行うことができる

also以外のスコープ関数について

also以外のスコープ関数について簡単な解説と、詳しい内容をまとめた記事へのリンクを紹介致します。

runについて

runは、公式ドキュメントで以下のように定義されております。

  • Kotlin
inline fun  run(block: () -> R): R

inline fun  T.run(block: T.() -> R): R

【公式ドキュメント】 : run – Kotlin Programming Language

【使用例】

  • Kotlin
val number = 10
val result = number.run {
   this + 10
}
println(result)

// 20
Point
  • ブロック処理内では、レシーバーをthisで参照できる
  • ブロック処理の最後の値を返す(レシーバーでなくてもよい)

詳しい解説はこちらをご覧ください。

【Kotlin基礎】スコープ関数runの実装方法と用途を解説

Kotlinには、スコープ関数という、シンプルですが、覚えておくと便利な関数があります。スコープ関数にはいくつか種類があるのですが、本記事では、runというスコープ関数について解説致します。

letについて

letは、公式ドキュメントで以下のように定義されております。

  • Kotlin
inline fun  T.let(block: (T) -> R): R

【公式ドキュメント】 : let – Kotlin Programming Language

【使用例】

  • Kotlin
val str = "hello"
val result = str.let {
   it.length
}

println(result)

// 5
Point
  • ブロック処理内では、レシーバーをitで参照できる
  • ブロック処理の最後の値を返す(レシーバーでなくてもよい)

詳しい解説はこちらをご覧ください。

【Kotlin基礎】スコープ関数letの実装方法と用途を解説

本記事では、スコープ関数letについて詳しく解説しております。スコープ関数にはいくつか種類があるのですが、あえてletにのみ焦点を当てる事に致しました。他のスコープ関数(run, apply, also等)につきましては、簡単な解説と、詳細をまとめた記事へのリンクがありますので、そちらをご覧頂けたらと思います。

applyについて

applyは、公式ドキュメントで以下のように定義されております。

  • Kotlin
inline fun  T.apply(block: T.() -> Unit): T

【公式ドキュメント】 : apply – Kotlin Programming Language

【使用例】

  • Kotlin
class User {
   var name: String = ""
   var age: Int = 0
}

val result = User().apply {
   name = "田中"
   age = 20
}

println("私の名前は${result.name}です、${result.age}才です。")

// "私の名前は田中です、20才です。
Point
  • ブロック処理内では、レシーバーをthisで参照できる
  • レシーバー自身を返す

詳しい解説はこちらをご覧ください。

【Kotlin基礎】スコープ関数applyの実装方法と用途を解説

スコープ関数は、初めはなかなか理解しづらいかもしれませんが、覚えておくととても便利です。本記事では、スコープ関数applyについて解説致します。他のスコープ関数(let, run, also等)につきましては、簡単な解説と、詳細をまとめた記事へのリンクがありますので、そちらをご覧頂けたらと思います。

まとめ

  • alsoは、オブジェクトにまとめて処理を行う際に便利
  • ?. をセーフコール演算子と呼ぶ
  • ?.also { }で、nullでないことを確認し、安全に処理を行うことができる
  • alsoを呼び出すオブジェクトをレシーバーと呼ぶ
  • ブロック{ }内では、itでレシーバーを参照できる
  • itではなく、任意の変数でレシーバーを参照することもできる
  • alsoはブロック処理後、レシーバー自身を返す
文字数: 3858 最後の編集: 2020年3月22日 5:17 PM – Genta パネルを閉じる: 公開 変更をプレビュー(新しいウィンドウで開きます) ステータス: 公開済み 編集ステータスを編集 公開状態: 公開 編集公開状態を編集 リビジョン: 9 表示リビジョンを表示 公開日時: 2020年1月30日 @ 21:40 編集日時を編集 ゴミ箱へ移動 パネルを閉じる: カテゴリー カテゴリー一覧 よく使うもの プログラミング Kotlin 作品集 Swift WordPress + 新規カテゴリーを追加 パネルを閉じる: タグ 新規タグを追加 タグが複数ある場合はコンマで区切ってください タグを削除: スコープ関数 スコープ関数 よく使われているタグから選択 パネルを閉じる: アイキャッチ画像 編集または更新する画像をクリック アイキャッチ画像を削除 パネルを閉じる: All in One SEO PackHelp UPGRADE TO PRO VERSION Preview Snippet 【Kotlin基礎】スコープ関数alsoの実装方法と用途を解説 | Genta Hirauchi http://localhost/app/kotlin-also/ Kotlinにはスコープ関数という覚えておくと便利な関数があります。スコープ関数にはいくつか種類があるのですが、本記事では、スコープ関数alsoに焦点を当て解説致します。他のスコープ関数(let, run,… Title 【Kotlin基礎】スコープ関数alsoの実装方法と用途を解説 48 characters. Most search engines use a maximum of 60 chars for the title. Description Kotlinにはスコープ関数という覚えておくと便利な関数があります。スコープ関数にはいくつか種類があるのですが、本記事では、スコープ関数alsoに焦点を当て解説致します。他のスコープ関数(let, run, apply等)につきましては、簡単な解説と、各記事へのリンクがありますので、そちらをご覧頂けたらと思います。 158 characters. Most search engines use a maximum of 160 chars for the description. Custom Canonical URL NOINDEX this page/post NOFOLLOW this page/post Disable on this page/post パネルを閉じる: 抜粋 抜粋 Kotlinにはスコープ関数という覚えておくと便利な関数があります。スコープ関数にはいくつか種類があるのですが、本記事では、スコープ関数alsoに焦点を当て解説致します。他のスコープ関数(let, run, apply等)につきましては、簡単な解説と、各記事へのリンクがありますので、そちらをご覧頂けたらと思います。 抜粋は投稿内容から自分で作成する要約で、テーマの中で使用できます (オプション)。詳しくは解説ページをご覧ください。 パネルを閉じる: コメント コメントする まだコメントはありません。 パネルを閉じる: スラッグ スラッグ kotlin-also WordPress のご利用ありがとうございます。バージョン 5.3.2 を入手する