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


関連記事

SafetyNet Attestation APIでRoot化チェック【基本的な検証編】

1 はじめに2 SafetyNet Attestation APIとは2.1 注意点2.1.1 レスポンス結果はアプリ内で判定しない2.1.2 JWSのキーチェーンをチェックする2.1.3 レスポンス ...

Android CameraXプレビューを実装してみた

1 はじめに2 CameraXとは3 Android Jetpackについて4 Cameraパーミッションの追加5 ソースコード全容6 プレビューの実装7 さいごに8 おすすめ書籍 はじめに こんにち ...

Android StudioのInstant Runの種類

1 はじめに2 概要3 全部で3種類4 コールドスワップになる条件5 ビルドおよびデプロイが実行される条件6 再実行について7 参考ページ8 さいごに はじめに はじめまして、nomuraと申します。 ...

【Androidマテリアル】Ripple Effect

1 はじめに2 Ripple Effectとは3 設定方法4 カスタマイズ5 さいごに はじめに こんにちは、ソニーから新Aiboが発表されましたね。個人的には欲しいと思っているのですが、最近Goog ...

GoogleMap Clusterのカスタマイズ

1 はじめに2 クラスタ内のアイテムクラス3 クラスタをレンダリングするクラス4 クラスタの色を設定する5 クラスタ化の最小個数を設定する6 クラスタのクリックイベントを拾う7 さいごに はじめに 最 ...

フォロー

blog-page_side_responsive

2019年1月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

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