이 함수/메서드 중 순수 함수를 표현하는 것을 찾을 수 있는가? 다음에 나올 답을 보기 전에 잠시 생각해 보라. 앞에서 설명한 순수 함수의 조건과 각 함수의 내부에서 일어나는 처리를 생각해 보라. 외부에서 관찰할 수 있는 게 무엇인지가 중요함을 기억하라. 예외 조건을 잊어서는 안 된다.
fun add(a: Int, b:Int): Int = a + b
첫 번째 함수 add는 항상 인자에 따라 정해지는 값을 반환하기 때문에 순수 함수다. 이 함수는 인자를 변이시키지도 않고 외부 세계와 전혀 상호 작용하지도 않는다. a + b가 Int의 최대 범위를 넘어 오버플로(overflow)가 발생하면 함수가 잘못 작동할 수는 있지만 예외를 던지지는 않는다. 오버플로가 발생하면 잘못된 값(음수 값)이 결과로 반환되지만 그것은 별개의 문제다. 인자가 같으면 항상 같은 값을 돌려줘야만 하지만, 이것이 결과가 꼭 정확한 값이어야 한다는 뜻은 아니다!
정확성
정확성(exactness)이라는 말은 그 자체로 아무 뜻도 아니다. 정확성은 일반적으로 프로그래머가 원하는 내용에 부합하는가를 뜻한다. 어떤 함수 구현이 정확하다고 말하려면 구현한 사람의 의도를 알아야 한다. 하지만 함수 이름 외에 구현한 사람의 의도를 알 수 있는 요소가 없는 경우가 많기 때문에 의도를 잘못 이해하는 일이 벌어지고는 한다.