アプリカティブなんとかみたいなやつ
val minus = { a: Int -> { b: Int -> a - b } }
fun T.bind(f: ((T)->R)?): R? = f?.invoke(this)
y?.bind(x?.bind(minus))
fun ((T)->R).apply(n: T?): R? = n?.bind(this)
val sub: Int? = minus.apply(x)?.apply(y)
http://taro.hatenablog.jp/entry/2014/04/06/144811
よくあるやつ: 遷移元
class SourceActivity: Activity() {
fun go() {
val data = “hogefuga”
startActivity(TargetActivity.intent(this, data))
}
}
Slide 17
Slide 17 text
よくあるやつ: 遷移元
class SourceActivity: Activity() {
fun go() {
val data = “hogefuga”
startActivity(TargetActivity.intent(this, data))
}
} thisを書きたくない!
簡単には拡張関数に
できなさそう...
イマイチな使用例: 遷移元
class SourceActivity: Activity() {
fun go() {
val data = “hogefuga”
startActivity(TargetActivity.intent(data)(this))
}
}
Slide 22
Slide 22 text
よさげな使用例: 遷移元
class SourceActivity: Activity() {
fun go() {
val data = “hogefuga”
TargetActivity.intent(data).start()
}
fun ((Context)->Intent).start() {
startActivity(this(applicationContext))
}
}
Slide 23
Slide 23 text
よさげな使用例: 遷移元
class SourceActivity: Activity() {
fun go() {
val data = “hogefuga”
TargetActivity.intent(data).start()
}
fun ((Context)->Intent).start() {
startActivity(this(applicationContext))
}
}
ここからthisが消えた
共通部品を使う: 遷移先
class TargetActivity: Activity() {
companion object {
fun intent(data: String) =
intentBuilder {
putExtra(“data”, data)
}
}
}
Slide 26
Slide 26 text
共通部品化する for 遷移元
interface IntentFeature {
fun startActivity(intent: Intent)
fun getApplicationContext()
fun ((Context)->Intent).start() {
startActivity(this(getApplicationContext()))
}
} インタフェースを継承するので
はなく、抽象メソッドを定義して
おく
Slide 27
Slide 27 text
共通部品を使う: 遷移元
class SourceActivity: Activity(), IntentFeature {
fun go() {
val data = “hogefuga”
TargetActivity.intent(data).start()
}
}