Scope Functions
Also Side Value
Use also when a block should observe a value and keep that value.
also
`also` passes the value as `it`, runs the block, and returns the original value.
Also Side Value
AlsoSideValue.kt
Replay: real traced execution (multi-file project)
fun main() {
val number = 4
var note = "waiting"
val before = note
val doubled = (number * 2).also { value ->
note = "saw:$value"
}
println("number=$number")
println("before=$before")
println("doubled=$doubled")
println("note=$note")
}
fun main() {
val number = 2
var note = "waiting"
val before = note
val doubled = (number * 2).also { value ->
note = "saw:$value"
}
println("number=$number")
println("before=$before")
println("doubled=$doubled")
println("note=$note")
}
fun main() {
val number = 6
var note = "waiting"
val before = note
val doubled = (number * 2).also { value ->
note = "saw:$value"
}
println("number=$number")
println("before=$before")
println("doubled=$doubled")
println("note=$note")
}
number ← 4, note ← waiting, before ← waiting, doubled ← 8
1fun main() {2 val number→ 4 = 4 //@number=2, 63 var note→ waiting = "waiting"4 val before→ waiting = notewaiting5 val doubled→ 8 = (number4 * 2).also { value ->6 note = "saw:$value"7 }89 println("number=$number4")10 println("before=$beforewaiting")11 println("doubled=$doubled8")12 println("note=$notesaw:8")13}outputnumber=4 before=waiting doubled=8 note=saw:8
number ← 2, note ← waiting, before ← waiting, doubled ← 4
1fun main() {2 val number→ 2 = 23 var note→ waiting = "waiting"4 val before→ waiting = notewaiting5 val doubled→ 4 = (number2 * 2).also { value ->6 note = "saw:$value"7 }89 println("number=$number2")10 println("before=$beforewaiting")11 println("doubled=$doubled4")12 println("note=$notesaw:4")13}outputnumber=2 before=waiting doubled=4 note=saw:4
number ← 6, note ← waiting, before ← waiting, doubled ← 12
1fun main() {2 val number→ 6 = 63 var note→ waiting = "waiting"4 val before→ waiting = notewaiting5 val doubled→ 12 = (number6 * 2).also { value ->6 note = "saw:$value"7 }89 println("number=$number6")10 println("before=$beforewaiting")11 println("doubled=$doubled12")12 println("note=$notesaw:12")13}outputnumber=6 before=waiting doubled=12 note=saw:12
Follow the Value
numberstarts at4.notestarts aswaiting, sobeforealso becomeswaiting.number * 2makes8.alsosees that8and changesnotetosaw:8.alsostill returns the original8, sodoubledis8. | number | before | doubled | final note | | ---: | --- | ---: | --- | | 2 | waiting | 4 | saw:4 | | 4 | waiting | 8 | saw:8 | | 6 | waiting | 12 | saw:12 |
Exercise: AlsoSideValue.kt
Reproduce number=4, before=waiting, doubled=8, and note=saw:8, then use numbers 2 and 6 to predict doubled and note.