Android/Kotlin

let, run, apply, with

lipnus 2018. 12. 11. 13:55
반응형


1. let


val num: Int = (a*b - 2*a)
testFunction(num)


(a*b - 2*a).let{
testFunction(it)


val padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16f, resources.displayMetrics).toInt()
// 왼쪽, 오른쪽 padding 설정
setPadding(padding, 0, padding, 0)


TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16f, resources.displayMetrics).toInt().let { padding ->
// 계산된 값을 padding 이라는 이름의 인자로 받음
setPadding(padding, 0, padding, 0)
}

아래는 모두 let을 활용하여 고친 형태


// null일 수 있는 변수 obj
var obj: String?

// ...작업 수행...

// obj가 null이 아닐 경우 작업 수행 (기존 방식)
if (null != obj) {
Toast.makeText(applicationContext, obj, Toast.LENGTH_LONG).show()
}

// obj가 null이 아닐 경우 작업 수행 (Safe calls + let 사용)
obj?.let {
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
}

Safe Call 한거.

매개변수가 하나일 경우, 람다식 안쓰고 it으로 대체 가능.



2. run

// 웹뷰의 인스턴스를 가져온다

val settings = main_webview.settings

settings?.run{
// 자바스크립트 사용가능 유무
javaScriptEnabled = true

// cache유무
setAppCacheEnabled(true)
cacheMode = WebSettings.LOAD_DEFAULT
setAppCachePath(cacheDir.path)

// zoom
setSupportZoom(true)
builtInZoomControls = true
displayZoomControls = true

// ...
}


main_webview.settings.run{
// 자바스크립트 사용가능 유무
javaScriptEnabled = true

// cache유무
setAppCacheEnabled(true)
cacheMode = WebSettings.LOAD_DEFAULT
setAppCachePath(cacheDir.path)



3. apply

val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
param.gravity = Gravity.CENTER_HORIZONTAL
param.weight = 1f
param.topMargin = 100
param.bottomMargin = 100
val param = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.CENTER_HORIZONTAL
weight = 1f
topMargin = 100
bottomMargin = 100
}



참고: https://www.androidhuman.com/lecture/kotlin/2016/07/06/kotlin_let_apply_run_with/

반응형

'Android > Kotlin' 카테고리의 다른 글

const val과 그냥 val의 차이  (0) 2019.01.22
lateinit & by lazy  (0) 2018.12.11
클로저(Closure)  (0) 2018.12.09
고차 함수(Higher-order Function)  (0) 2018.12.09
람다식(Lambda Expression) & 익명함수(Anonymous Function)  (0) 2018.12.09