Android

Kotlinのスコープ関数を調べて見た

投稿日:2019年1月28日 更新日:

はじめに

こんにちは、suzukiです。
今更ながらKotlinの学習を初めました。iOSの開発がメインのため、Androidのことに関しては無知のためわからないことだらけです。
本を読みながら学習中で、備忘のためこちらで記事にしていこうと思います。
今回はスコープ関数についてです。

スコープ関数とは

Kotlinではスコープ関数と呼ばれる関数群が用意されています。これらは特定の名前で参照される範囲を変更し

  • コードの簡略化
  • コードの可読性を上げる

上記を目的に使われます。必ず使わなくてはならないかというとそんなことはないらしいのですが、Kotlinの魅力の一つだと思い学んで行きたいと思います。

スコープ関数の種類について

今回説明するスコープ関数を先にあげます。

スコープ関数 書式 アクセス方法 戻り値
with with(関数オブジェクト){処理} this ラムダの戻り値
apply 対象オブジェクト.apply{処理} this 対象オブジェクト
let 対象オブジェクト.let{処理} it ラムダの戻り値
run 対象オブジェクト.run{処理} this ラムダの戻り値

以上合計4つです。

with関数

with関数は対象のオブジェクトに対して繰り返し処理を行う場合に使います。
ラムダ式内ではthisで参照し、ラムダ式の戻り値を返します。
with(関数オブジェクト){処理}

使い方

仮に下記のようなクラスがある場合

withを使わない場合

withを使う場合

所感

インスタンスを省略してアクセスできるため描きやすい、また特定の関数の戻り値だけ必要な場合などに便利に使えそう。
thisでインスタンスを返すのであれば後述のapplyを使った方がいい気がする。
冗長になるかもしれないが戻り値の型を書くなどのルールが欲しくなるかもしれない。

apply関数

オブジェクトを生成してそこに各種設定値を渡す場合によく使用される。withと似ているが戻り値が対象オブジェクトである。
対象オブジェクト.apply{処理}

使い方

先ほどのStudentクラスでapplyを使用する場合

所感

戻り値が対象オブジェクトなので、結果がわかりやすい。
withとの使いわけは対象オブジェクトをそのまま使いたいときはapplyを使う程度の使いわけでいい気がする。

let関数

letはnull許容型を?.と一緒に使うことで扱いやすくすることができる。対象オブジェクトをitで参照できラムダ式の戻り値がletの戻り値になる。
対象オブジェクト.let{処理}

使い方

?.でnull評価+ラムダ内で処理を行い結果を返却という使われ方が多い。

所感

?.の機能で対象のオブジェクトのnull評価+何らかの処理を行うためflatMapのような使い方ができそう。
ラムダの結果は特に意識せずにswiftのif let みたいな使い方もできる。
後述のrunと比較した場合、thisがスコープ内とスコープ外で同じという点が大きく違う。

run関数

letとほぼほぼ同じだがwithやapplyのようにthisで対象のオブジェクトにアクセスが可能。

使い方

thisで参照できるようになっているため、レシーバーに対する処理になる。?:で使う場合はthisの内容はスコープの内外で同じになる。。。

所感

runという名前から何らかの処理を行い結果を返すという考え方で、レシーバーがnullだった時に何らかの処理を行って値を取得するという使い方であればletとの使いわけがしやすいかと思える。

さいごに

他にもスコープ関数はあるのですが、学習中の本で扱われているのは上記の4つでした。
それぞれまとめてみると、スコープ関数の使用するルールを決めて運用していく方がいいように感じました。
letであれば全部のパターンに使えそうですし、、、

KotlinはSwiftと似ているということで勧められて勉強しておりますが、iOSとAndroidの違いで苦戦しております。

おすすめ書籍

Kotlinスタートブック -新しいAndroidプログラミング Kotlinイン・アクション 速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

blog-page_footer_336




blog-page_footer_336




-Android
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Android 11でdeprecatedになったAsyncTask対応Java編

1 はじめに2 基本的な対応2.1 対応後のサンプル2.2 cancelとonCancelled3 execute().get()への対応4 最後に5 おすすめ書籍 はじめに タイトルの通りAndro ...

AndroidでWebViewを使用するときに気をつけたいポイント追加4選!

1 はじめに2 Cookie2.1 Cookieを設定する2.2 Cookieを取得する3 ハンドリングの効かないページ遷移3.1 POSTでのページ遷移3.2 PDFなど、WebViewで開くことの ...

【Kotlin】FirebaseAuthenticationでメールアドレスで認証機能を実装

1 はじめに2 レイアウト3 新規登録4 ログイン5 さいごに6 参考7 おすすめ書籍 はじめに こんにちは。miyagawaです。 前回は「FirebaseAuthenticationでGoogle ...

【Java】スレッドについてまとめてみました

1 はじめに2 スレッドの基本について3 スレッドの利用4 Threadクラス5 Runnableインターフェース6 同期処理7 synchronized修飾子8 おわりに9 おすすめ書籍 はじめに ...

【kotlin】CameraXでAndroidカメラを実装してみた

1 はじめに2 概要3 使用前の準備4 ViewFinderLayoutを実装する5 Camera Permissionのリクエスト6 カメラ撮影機能を実装する6.1 Previewクラスの実装6.2 ...

フォロー

blog-page_side_responsive

2019年1月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。