Scope Functions
Let Basics
Use let to name a temporary value inside a small block.
let
`let` passes the current value into a block and returns the block result.
Let Basics
LetBasics.kt
Replay: real traced execution (multi-file project)
fun main() {
val raw = " kotlin "
val cleaned = raw.trim().let { value ->
if (value.isEmpty()) {
"empty"
} else {
value.toUpperCase()
}
}
println("raw=${raw.length}")
println("cleaned=$cleaned")
}
fun main() {
val raw = " ada "
val cleaned = raw.trim().let { value ->
if (value.isEmpty()) {
"empty"
} else {
value.toUpperCase()
}
}
println("raw=${raw.length}")
println("cleaned=$cleaned")
}
fun main() {
val raw = " "
val cleaned = raw.trim().let { value ->
if (value.isEmpty()) {
"empty"
} else {
value.toUpperCase()
}
}
println("raw=${raw.length}")
println("cleaned=$cleaned")
}
raw ← kotlin , cleaned ← KOTLIN
1fun main() {2 val raw→ kotlin = " kotlin " //@raw=" ada ", " "3 val cleaned→ KOTLIN = raw kotlin .trim().let { value ->4 if (value.isEmpty()) {5 "empty"6 } else {7 value.toUpperCase()8 }9 }1011 println("raw=${raw.length8}")12 println("cleaned=$cleanedKOTLIN")13}outputraw=8 cleaned=KOTLIN
raw ← ada , cleaned ← ADA
1fun main() {2 val raw→ ada = " ada "3 val cleaned→ ADA = raw ada .trim().let { value ->4 if (value.isEmpty()) {5 "empty"6 } else {7 value.toUpperCase()8 }9 }1011 println("raw=${raw.length5}")12 println("cleaned=$cleanedADA")13}outputraw=5 cleaned=ADA
raw ← , cleaned ← empty
1fun main() {2 val raw→ = " "3 val cleaned→ empty = raw .trim().let { value ->4 if (value.isEmpty()) {5 "empty"6 } else {7 value.toUpperCase()8 }9 }1011 println("raw=${raw.length1}")12 println("cleaned=$cleanedempty")13}outputraw=1 cleaned=empty
Follow the Value
rawstarts as" kotlin ".raw.lengthis8.trim()removes the outside spaces and giveskotlin.letnames that trimmed value asvalue.- Because
valueis not empty, the block returnsKOTLIN. | raw value | raw.length output | value after trim | cleaned output | | --- | ---: | --- | --- | |" ada "| 5 | ada | ADA | |" kotlin "| 8 | kotlin | KOTLIN | |" "| 1 | empty string | empty | @exercise LetBasics.kt "Reproduce raw=8 and cleaned=KOTLIN, then use raw values " ada " and " " to predict cleaned=ADA and cleaned=empty."