set.add(2)
보다는 set +=2
처럼 코틀린은 간결한 구문을 지원한다. fun createSimpleTable() = createHTML().
table {
tr {
td { +"cell" }
}
}
<tr>
태그를 만들 수 있고 tr 함수에 넘겨진 람다에서는 td 함수를 사용해 <td>
태그를 만들 수 있다. (타입 안전성)String.(Int, Int) -> Unit <수신객체타입><파라미터타입><반환타입>
fun buildString(
builderAction: StringBuilder.() -> Unit
) : String {
val sb = StringBuilder()
sb.builderAction()
return sb.toString()
}
//main 함수
val s = buildString {
this.append("Hello, ") //this 키워드는 StringBuilder 객체를 가리킴
append("World!") //this 를 생략해도 묵시적으로 StringBuilder 객체가 수신 객체로 취급
}
println(s) //Hello, World!
StringBuilder
: 수신객체타입()
: 파라미터는 없음 Unit
: 반환 타입val Int.days: Period //반환 타입:Period
get() = Period.ofDays(this)
val Period.ago: LocalDate //위 days 의 반환타입인 Period.ago 확장함수
get() = LocalDate.now() - this //어제
val Period.fromNow: LocalDate //위 days 의 반환타입인 Period.ago 확장함수
get() = LocalDate.now() + this //내일
println(1.days.ago) //2022-06-06
println(1.days.fromNow) //2022-06-08
class Greeter(val greeting: String) {
operator fun invoke(name: String) {
println("$greeting, $name!") //Servus, Dmitry!
}
}
//main
val bavarianGreeter = Greeter("Servus")
bavarianGreeter("Dmitry")
bavarianGreeter.invoke("Dmitry")
로 컴파일 됨 음..어렵다🥸 깊게 이해하기 보다는 나중에 HTML DSL, DB 쿼리 빌더 등을 사용할 때 이것이 DSL이구나! 라는 거라도 생각하면서 사용하는 개발자가 되자. 일단은 그래보자.