반응형
스코프 함수 관련 공식 문서 예제를 싹 다 적어 봤음.
fun main(args: Array<String>) {
val person = Person("Lee", 25).let {
it.moveTo("Korea")
it
}
println(person)
//run 과 let 의 리시버의 차이 run 은 확장 함수로 this 로, let 의 경우는 확장 함수지만 it를 호출 함.
var str = "Hello"
str.run {
println("The String's length: $length")
}
str.let {
println("The String's length is ${it.length}")
}
val adam = Person("Adam").apply {
age = 20
}
println(adam)
fun getRandomInt(): Int {
return Random.nextInt(100).also {
writeToLog("getRandomInt() generated value $it")
}
}
val i = getRandomInt()
println(i)
val numberList = mutableListOf<Double>()
numberList.also { println("Populating the list") }
.apply {
add(2.71)
add(3.14)
add(1.0)
}
.also { println("Sorting the list") }
.sort()
println(numberList)
val numbers = mutableListOf<String>("one", "two", "three")
val countEndWithE = numbers.run {
add("four")
add("five")
//endsWith(): 어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있다. 그 결과로는 true 혹은 false 로 반환
count { it.endsWith("e") }
}
println("There ara $countEndWithE elements that ent with e.")
with(numbers) {
val firstItem = first()
val lastItem = last()
println("First item: $firstItem , last item: $lastItem")
}
//지금 있는 문자열을 문자의 길이인 배열로 바꾼뒤 그 값이 3 이상인 것만 걸러줌.
val resultList = numbers.map { it.length }.filter { it > 3 }
println(resultList)
//코틀린 표준 함수를 이용하면
//resultList 라는 변수를 사용하지 않고 let 을 이용해 this 를 파라미터로 입력해 it를 사용해 프로퍼티에 접근 함
numbers.map { it.length }.filter { it > 3 }.let {
println(it)
}
//더 짧게 줄이면
numbers.map { it.length }.filter { it > 3 }.let(::println)
val str2: String? = "Hello"
val length = str2?.let {
println("let() called on $it")
processNonNullString(it)
it.length
}
val modifiedFirstItem = numbers.first().let { firstItem ->
println("The first item of the list is $firstItem")
if (firstItem.length >= 5) firstItem else "!" + firstItem + "!"
}.uppercase() //uppercase 로 대문자로 찍음
println("First item after modifications: '$modifiedFirstItem'")
with(numbers) {
println("'with' is called with argument $this")
println("It contains $size elements")
}
val firstAndLast = with(numbers) {
"The first element is ${first()}," +
"the last element is ${last()}"
}
println(firstAndLast)
val service = MultiportService("https://example.kotlinlang.org", 50)
val runResult = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}
val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
println(runResult)
println(letResult)
val hexNumberRegex = run {
val digits = "0-9"
val hexDigits = "A-Fa-f"
val sign = "+-"
Regex("[$sign]?[$digits$hexDigits]+")
}
for (match in hexNumberRegex.findAll("+123 -FFFF !%*& 88 XYZ")) {
println(match.value)
}
numbers.also {
println("The list elements before adding new one: $it")
}.add("four")
}
class MultiportService(var url: String, var port:Int) {
fun prepareRequest() : String = "Default request"
fun query(request: String): String = "Result for query '$request'"
}
fun processNonNullString(str: String) {
}
fun writeToLog(message: String) {
println("INFO: $message")
}
data class Person(var name: String, var age: Int = 0) {
fun moveTo(country: String): String {
println(country)
return country
}
}
참조:
https://kotlinlang.org/docs/scope-functions.html#takeif-and-takeunless
반응형
'Kotlin' 카테고리의 다른 글
#Kotlin 표준 함수 1 (0) | 2022.11.09 |
---|---|
#Kotlin 수업 정리 2 (0) | 2022.11.08 |
#Kotlin 수업 정리 1 (0) | 2022.11.08 |