3장
1 역주 모든 언어의 컴파일러가 파라미터 타입을 추론하지 못하는 것은 아니다. 특히 함수형 프로그래밍 언어의 컴파일러는 대부분 함수 정의의 파라미터 타입도 가장 일반화된 타입으로 추론해준다. 이런 차이는 채택하는 타입 추론 엔진이 달라서 생긴다.
2 역주 실제로는 Number에 times() 함수가 정의돼 있지 않기 때문에 fun mul(a: Number, b: Int = 1) = a*b라는 코드가 컴파일되지 않는다. 이 예제는 오버로딩과 디폴트 인자 해소 시 타입을 어떻게 고려하는지 알려주기 위한 사고 실험으로 간주하라.
3 역주 readInt(radix: 8)에서 흐리게 radix:라고 표시된 부분은 인텔리J의 파라미터 이름 힌트 기능에 의해 인텔리J가 표시해준 부분이다(직접 radix:를 입력하면 구문 분석 오류가 난다). File > Settings > Editor > Inlay Hints > Kotlin에서 Show parameter hints 체크를 해제하면 파라미터 힌트가 사라진다.
4 역주 어떤 집합 A에 대한 릴레이션(relation) R이 있을 때 a R b와 b R c가 성립하면 a R c도 참인 경우, R이 추이적이라고 말한다.
6 역주 ‘procedural programming’이라는 용어를 ‘순차적 프로그래밍’이라고 번역하는 경우가 자주 있지만, 이는 오해의 여지가 있다. 실제로 ‘procedural programming’은 함수 또는 프로시저 호출을 중심으로 코드를 작성하는 방법을 뜻하며, 단순히 명령어를 순차적으로 나열하는 프로그래밍 기법을 의미하지는 않는다. 즉, 코드를 적절한 덩어리로 구분해 적당한 이름을 붙인 함수나 프로시저를 만들고, 이런 추상화를 바탕으로 더 상위의 함수를 작성해 나감으로써 좀 더 이해하기 쉽고 관리하기 쉬운 코드 기반을 만드는 프로시저 중심의 프로그래밍 패러다임을 말한다.