fbpx
  1. HOME
  2. ブログ
  3. IT技術
  4. 【Kotlin】DelegatedProperties(委譲プロパティ) を使って Android SharedPreferences を使いやすくしてみた

【Kotlin】DelegatedProperties(委譲プロパティ) を使って Android SharedPreferences を使いやすくしてみた

はじめに

(株)ライトコードの江幡(えばた)です!

以前より、SharedPreferences についてこんなことを感じていました。

「Key や デフォルト値を const(定数) で管理するのわかりづらいなぁ…」

「もっと、わかりやすく単純に書く方法はないかなぁ?」

そう思っていたところ、Kotlin の DelegatedProperties(委譲プロパティ) を使えば、うまく解決できそうだったのでご紹介したいと思います!

江幡さん 江幡さん
今回は、Kotlin の DelegatedProperties(委譲プロパティ) についてお勉強しましょう!
ミツオカミツオカ
わあ!爽やかイケメン!

DelegatedProperties(委譲プロパティ) とは

その名の通り、Kotlinの プロパティ 機能を、別のクラスに委譲することができる仕組みです。

個人的に、「カスタムGetter/Setter を別のクラスに書くもの」のようなものだと思っています。

委譲プロパティの書き方

プロパティ定義の右側に by を記載して定義します。

var myProperty: Int by Hoge()

上記は、こんなことを定義しています。

  1. myProperty への読み書き(Getter/Setter)の処理を、by の右側の Hoge で行うようにする

このときの Hoge は ReadWriteProperty を継承している必要があります。

江幡さん 江幡さん
これで myProperty のget時には getValue()  が呼ばれ、set時には setValue()  が呼ばれるようになります!
ミツオカミツオカ
なるほど〜!!

SharedPreferences を使いやすくしてみた

この委譲プロパティを用いて、SharedPreferencesを使いやすくしたソースコードは以下の通りです。

使い方

6、7行目のプロパティ(totalLaunchCount や lastLaunchTime)への読み書きが、

そのまま、プロパティ名をKey とした ShardPreferences への読み書きになります。

新たにSharedPreferencesの項目を追加したい場合は、以下のように、書くだけでOKです。

・non-nullの場合

var プロパティ名: Int by pref(default = 0)

・nullableの場合

var プロパティ名: Int? by nullablePref()

解説

江幡さん 江幡さん
pref()  か  nullablePref()  で 委譲先のインスタンスを取得しています。
ミツオカミツオカ
引数でデフォルト値を設定できるんですね!
江幡さん 江幡さん
委譲先の getValue() setValue() にて、SharedPreferencesの読み書きを行っています。13、21、30、35行目のように val key = property.name でプロパティ名が取得できるので、SharedPreferencesの読み書きに必要なKeyとして利用しています。
ミツオカミツオカ
なるほど!ここでプロパティ名を取得して、Keyとして使っているのですね!

まとめ

プロパティ名をそのままKeyとして使ってくれるので、わざわざconst(定数)を書く必要がなくなりました

また、デフォルト値もわかりやすい位置に書けるようになりました。

書こうと思えば SharedPreferences で保存できない型でも定義できてしまうのが少し気になりますが、自分で使うだけなら、問題はないかなぁと思っています。(もし忘れていても例外出るので…)

もし気になるのであれば、 fun intPref(): ReadWriteProperty<SharedPref, Int> {/*...省略...*/} という感じで、各型専用の委譲先クラスを作ればいいと思います。

江幡さん 江幡さん
今回は、 SharedPreferences を対象にしましたが、委譲プロパティは他にも色々と使えそうですね
ミツオカミツオカ
そうですね!面白い使い方があれば、また紹介していきます!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事