this
- 함수와 프로퍼티를 지역 또는 톱레벨 변수가 아닌 다른 리시버로부터 가져온다는 것을 나타낼 수 있다
- 확장 리시버를 명시적으로 참조가 가능하다. (확장 메서드에서의 this)
여러 개의 리시버
스코프 내부에 둘 이상의 리시버가 있는 경우, 리시버를 명시적으로 나타내자
> 짧게 적을 수 있다는 이유만으로 리시버를 제거하지 말자.
레이블 없이 리시버를 사용하면 가장 가까운 리시버를 의미한다.
리시버는 주로 apply, with, run, also, let에서 사용된다.
@ : qualified this - outer scope에 있는 this를 접근할 수 있다.
[코드 삽입하기]
DSL 마커
코틀린 DSL : 여러 리시버를 가진 요소들이 중첩되어도 리시버를 명시적으로 붙이지 않도록 설계되어 있다.
DSL에서 외부 스코프에 있는 리시버를 명시적으로 적게 강제하고 싶다면 Dsl 메타 어노테이션을 사용한다.
@DslMaker :암묵적으로 외부 리시버를 사용하는 것을 막는 메타 어누테이션 (어노테이션을 위한 어노테이션)
가장
@DslMaker
annotation class HtmlDsl
fun table(f: TableDsl.() -> Unit) { /*…*/}
@HtmlDsl
class TableDsl { /*….*/ }
'Reading Record > 이펙티브 코틀린' 카테고리의 다른 글
[이펙티브 코틀린] Item17. 이름 있는 아규먼트를 사용하라 (0) | 2022.04.26 |
---|---|
[이펙티브 코틀린] Item16. 프로퍼티는 동작이 아니라 상태를 나타내야 한다. (0) | 2022.04.26 |
[이펙티브 코틀린] Item14. 변수 타입이 명확하지 않은 경우 확실하게 지정하라 (0) | 2022.04.26 |
[이펙티브 코틀린] Item13. Unit?을 리턴하지 말라 (0) | 2022.04.26 |
[이펙티브 코틀린] Item12. 연산자 오버로드를 할 때는 의미에 맞게 사용하라 (0) | 2022.04.19 |