/var/log/messages

debugging with sixth sense

Kotlin-android-example

以下なリポジトリのソースを確認してみることに。

AndroidStudio にて開くのに少々手間がかかりました。特に最下層の buld.gradle にて

1
2
3
dependencies {
    classpath 'com.android.tools.build:gradle:1.1.0'
}

てなってて 1.1.3 に修正して事無きを得ていたり。

いくつか不明なソレを

列挙してみて調べてみます。

  • data class という表現
  • BehaviorSubject
  • private var mApp: MainApplication by Delegates.notNull() という表現
  • Activity が `LoaderManager.LoaderCallbacks を継承 (?) している件
  • companion object という表現
  • Observable なナニを云々している部分について
  • loaderManager が謎

data class という表現

プロパティしか持たないクラスについては簡易に記述ができるようになっているのか。

1
data class User(val id: String, val name: String)

それだけではないみたいです。

  • equals や toString など自動生成
  • component 自動で生成

component って属性まとめて取り出せるみたい。

1
val (foo, bar) = Product("beer", 200)

BehaviorSubject

以下な形で使われています。

1
2
3
4
/** Called whenever a new character is typed */
val mNameObservable: BehaviorSubject<String> = BehaviorSubject.create()
/** Called whenever we receive a response from the server about a name */
val mUserObservable: BehaviorSubject<JsonObject> = BehaviorSubject.create()

なんとなく

  • テキストボックスの中身の状態による処理のため
  • 通信戻りの状態による処理のため

というのはなんとなく想像できはしますが細かい部分が微妙。あるいは以下な記述を確認してみるに

1
2
3
4
5
6
7
8
9
10
11
12
    // Whenever a new character is typed
    WidgetObservable.text(editText) 
        .doOnNext { e* OnTextChangeEvent =>
            addFrientButton.setEnabled(false)
            loading.setVisibility(View.INVISIBLE)
        }
        .map { it.text().toString() }
        .filter { it.length() >= 3 }
        .debounce(500, TimeUnit.MILLISECOUNDS)
        .subscribe {
            mNameObservable.onNext(it)
        }

  • 流れてる途中で呼ばれる doOnNext で入力中はボタン押せないし loading も表示しないように
  • map で入力な文字を String にして追加?
  • filter で文字数制限
  • debounce て何 (上記だと stream の処理を 500ms 待つのかな)

このあたり、がっつり掘ってみたいのですがなかなか時間がとれずorz

Comments