ラベル Kotlin の投稿を表示しています。 すべての投稿を表示
ラベル Kotlin の投稿を表示しています。 すべての投稿を表示

2017年7月20日木曜日

[Kotlin]スコープ関数のlet, with, run, apply, also の違い

を3日くらいにらめっこして、Kotlinのスコープ関数の違いについてざっくりとまとめてみました。

確認環境
Android Studio 3.0 Canary 7
Kotlin 1.1.3-2
macOS Sierra 10.12.15


returnがレシーバ returnが任意
レシーバの
拡張関数
apply with
run
任意の型の
拡張関数
also let

レシーバの拡張関数のとき
  • thisがラムダ式の内と外で参照先が違う
  • レシーバのprotected, privateの関数は呼び出せない
  • this@MainActivityのような記述で、外のthisも呼び出し可能

任意の型の拡張関数のとき
  • thisがラムダ式の内と外で参照先が一緒
  • レシーバをitで呼び出せる
  • itの代わりに任意の変数名の定義も可能(可読性UPに繋がる)

returnがレシーバのとき
  • 戻り値がレシーバ自身なので、用途に合っていれば1行コードが減る

2015年11月8日日曜日

KotlinでFragmentTransaction用の拡張関数

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fragmentTransaction { ft -> ft.add(R.id.fragment_container, MainFragment()) }
    }

    fun AppCompatActivity.fragmentTransaction(transaction: (ft: FragmentTransaction) -> Unit) {
        val ft = supportFragmentManager.beginTransaction()
        transaction(ft)
        ft.commit()
    }
}