Files and Text Streams
Resource Cleanup
Model opening, using, and closing a resource with explicit state.
resource-cleanup
Cleanup code should leave a resource in a known final state.
Resource Cleanup
ResourceCleanup.kt
Replay: real traced execution (multi-file project)
fun main() {
val chunk = "data"
var state = "open"
val opened = state == "open"
val readText = "read:$chunk"
state = "closed"
val ready = state == "closed"
println("opened=$opened")
println("read=$readText")
println("state=$state")
println("ready=$ready")
}
fun main() {
val chunk = "line"
var state = "open"
val opened = state == "open"
val readText = "read:$chunk"
state = "closed"
val ready = state == "closed"
println("opened=$opened")
println("read=$readText")
println("state=$state")
println("ready=$ready")
}
fun main() {
val chunk = "text"
var state = "open"
val opened = state == "open"
val readText = "read:$chunk"
state = "closed"
val ready = state == "closed"
println("opened=$opened")
println("read=$readText")
println("state=$state")
println("ready=$ready")
}
chunk ← data, state ← open, opened ← true, readText ← read:data
1fun main() {2 val chunk→ data = "data" //@chunk="line", "text"3 var state→ open = "open"4 val opened→ true = stateopen == "open"5 val readText→ read:data = "read:$chunkdata"6 state→ closed = "closed"7 val ready→ true = stateclosed == "closed"89 println("opened=$openedtrue")10 println("read=$readTextread:data")11 println("state=$stateclosed")12 println("ready=$readytrue")13}outputopened=true read=read:data state=closed ready=true
chunk ← line, state ← open, opened ← true, readText ← read:line
1fun main() {2 val chunk→ line = "line"3 var state→ open = "open"4 val opened→ true = stateopen == "open"5 val readText→ read:line = "read:$chunkline"6 state→ closed = "closed"7 val ready→ true = stateclosed == "closed"89 println("opened=$openedtrue")10 println("read=$readTextread:line")11 println("state=$stateclosed")12 println("ready=$readytrue")13}outputopened=true read=read:line state=closed ready=true
chunk ← text, state ← open, opened ← true, readText ← read:text
1fun main() {2 val chunk→ text = "text"3 var state→ open = "open"4 val opened→ true = stateopen == "open"5 val readText→ read:text = "read:$chunktext"6 state→ closed = "closed"7 val ready→ true = stateclosed == "closed"89 println("opened=$openedtrue")10 println("read=$readTextread:text")11 println("state=$stateclosed")12 println("ready=$readytrue")13}outputopened=true read=read:text state=closed ready=true