fun main() {
//run
Student().run {
number = "1234"
name = "run1"
printInfo() //1234 run1
}
val res = Student().run {
number = "4567"
name = "run2"
"$number $name"
}
println(res) //4567 run2
//let
// it을 거쳐서 프로퍼티를 호출할 수 있다.
Student().let {
it.number = "012"
it.name = "let"
it.printInfo() //012 let
}
//with
// run과 유사하게 it을 거치지 않고 바로 변수를 호출할 수 있다.
// 그러나 with함수의 인자로 클래스 객체를 받는다.
with(Student()){
number = "112"
name = "with"
printInfo()//112 with
}
//apply
// 객체를 반환
Student().apply {
number = "1234"
name= "apply"
}.printInfo() //1234 apply
//also
//apply와 유사하지만 프로퍼티를 바로 호출하지 않고 it을 거쳐서 호출
//객체를 반환한다.
Student().also {
it.number = "123"
it.name = "also"
}.printInfo()//123 also
//item?.let{ ...
//item이 null이 아닐 때 안의 내용을 실행
//null에 대한 안정성을 확보할 수 있다.
}
class Student() {
var number = ""
var name = ""
fun printInfo() {
println("$number $name")
}
}