고차 함수는 람다나 함수 참조를 인자로 넘길 수 있거나 람다나 함수 참조를 반환하는 함수다. 물론 함수를 인자로 받는 동시에 함수를 반환하는 함수도 고차 함수다. 예를 들어 표준 라이브러리 함수인 filter는 술어 함수(predicate: true/ false를 판단할 수 있는 식이나 boolean 값을 리턴하는 함수)를 인자로 받으므로 고차 함수다.
애노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에게 부여할 수 있고, 리플렉션을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다. 코틀린에서 애노테이션을 사용하는 문법은 자바와 똑같지만 애노테이션을 선언할 때 사용하는 문법은 자바와 약간 다르다. 리플렉션 API의 일반 구조는 자바와 같지만 세부 사항에서 약간 차이가 있다.
val readers: MutableList<String> = mutableListOf()val readers = mutableListOf<String>()
위의 선언은 동등하다.