인픽스 함수는 점과 괄호 없이 인픽스 형식으로 호출할 수 있는 함수로, 코드 가독성을 높여줍니다. 이러한 함수는 DSL(도메인 특화 언어)을 만드는 데 유용합니다.
infix 수정자와 함께 선언됩니다.예제:
infix fun Int.add(x: Int): Int = this + x val result = 5 add 10 // 15
여러 매개변수 또는 기본값이 있는 인픽스 함수를 사용할 수 있습니까?
답변: 아니요, 사용할 수 없습니다. 인픽스 함수는 기본값 없이 vararg 없이 정확히 하나의 필수 매개변수만 가질 수 있습니다.
잘못된 선언 예:
// 오류! infix fun foo(a: Int, b: Int) { }
이야기
프로젝트에서 빌더 함수 호출을 더 가독성 있는 인픽스 표현으로 대체하기 위해 인픽스 함수를 도입하려고 했습니다. 매개변수 수에 대한 제한을 몰라 두 매개변수로 함수를 선언하여 학생들이 컴파일이 되지 않는 이유를 오랫동안 이해하지 못했습니다.
이야기
개발자가 괄호 없이 큰 산술 표현식에서 인픽스 표현을 사용했으며, 연산자의 우선순위가 전통적인 수학 연산자와 같다고 생각했습니다. 그 결과 표현식은 예상과 다르게 계산되어야 했고 명시적인 괄호를 추가해야 했습니다.
이야기
컬렉션 내부에서 인픽스를 통해 쌍을 구현하고 내부에서 중첩을 적용했으나 문법에 대한 오해로 두 개의 중첩된 인픽스 호출이 작동하지 않았습니다. 최상위에서 쌍을 할당한 것만 작동했으며, 중첩된 쌍은 무시되어 중요한 데이터 손실이 발생했습니다.