// 함수를 이용한 람다식
val result = high("Sean", { x -> inc(x+3) })
// 소괄호 바깥으로 빼내고 생략
val result2 = high("Sean") { inc(it + 3) }
// 매개변수 없이 함수의 이름만 사용할 때
val result3 = hgih("Kim", ::inc)
// 람다식 자체를 넘겨 준 형태
val result4 = high("Sean") { x -> x + 3 }
// 매개변수가 한 개인 경우 생략
val result5 = hgih("Sean") { it + 3 }
// 만일 일반 매개변수가 없고 람다식이 유일한 인자라면 다음과 같이 표현 가능
val result6 = hgihNoArg{ it + 3 }
var result = 0 //외부의 변수
calc.addNum(2,3) { x,y -> result = x + y } // 클로저
println(result) // 값을 유지하여 5가 출력
public inline fun <T,R> T.let(block: (T) -> R): R {... return block(this) }
score?.let { println("Score: $it") } // let을 사용해 null 검사를 제거
val str = score.let { it.toString() }
println(str)
a = a.let{ it + 2 }.let{
println("a = $a")
val i = it + b
i
}
println(a) // 출력 : 5
var x = "Kotlin!"
x.let { outer ->
outer.let { inner ->
// 이때는 it을 사용하지 않고 명시적이름을 사용
print("Inner is $inner and outer is $outer")
}
}
var x = "Kotlin!"
x.let { outer ->
outer.let { inner ->
// 이때는 it을 사용하지 않고 명시적이름을 사용
print("Inner is $inner and outer is $outer")
"Inner String" // 이건 반환되지 않음
}
"Outer String" // 이 문자열이 반환되 x에 할당
}
var obj: String?
obj?.let { // obj가 null이 아닐 경우 작업 수행
Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
}
// ?: 사용
firstName?.let { print("$it $lastName") } ?: print("$lastName")
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
val b = person.also {
it.skills = "Java"
"success"
}
println(b) // "success"가 아닌 person객체 출력
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
person.apply { this.skills = "Switf } // this 생략 가능
public inline fun <R> run(block: () -> R): R = return block()
public inline fun <T, R> T.run(block: T.() -> R): R = return block()
skiils = run {
val level = "Kotlin Level: " + a
level // 마지막 표현식이 반환됨
}
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
supportActionBar?.let {
with(it){
setDisplayHomeAsUpEnabled(true)
setHomeAsUpIndicator(R.drawable.ic_clear_white)
}
}
supportActionBar?.run{
setDisplayHomeAsUpEnabled(true)
setHomeAsUpIndicator(R.drawable.ic_clear_white)
}
someObject?.takeIf{ it.status}?.apply{ doThis()}
PrintWriter(FileOutputStream("d::\\test\\output.txt")).use{
it.println("hello")
}
부스트코스 코틀린강좌를 참고하였습니다.