자바처럼 코틀린에도 블록 문(block statement)이 있다. 블록 문은 기본적으로 {}로 감싼 문(statement)의 그룹을 말한다. 문은 새줄 문자로 분리하거나(이런 식으로 분리하는 쪽을 권장함) 세미콜론으로 분리하며, 순서대로 실행된다.
함수 본문을 작성할 때 우리는 이미 블록을 사용했다. 문법적으로 문장이 하나 들어갈 수 있는 위치에 여러 문장을 넣고 싶다면 언제든 블록을 사용할 수 있다. 예를 들어 루프의 몸통이나 조건문의 각 경우를 나타내는 문장 위치에 블록을 쓸 수 있다. 실제로 루프에서는 몸통이 단 한 문장으로 구성된 경우라도 {}로 둘러싸서 블록으로 코드를 작성하는 경우가 많다.
블록 안에는 지역 변수나 지역 함수 정의가 들어갈 수 있다. 이런 선언의 영역(scope)은 해당 함수/변수가 선언된 블록 내부로 제한된다.
파라미터 정의는 암시적으로 함수가 호출될 때 자동으로 인자 값으로 초기화되는 지역 변수로 취급된다.
자바 vs. 코틀린 자바 메서드 파라미터는 디폴트가 가변이므로 함수 내부에서 변경하지 못하게 하려면 final을 지정해 불변 값으로 바꿔야 하는데, 코틀린 함수 파라미터는 무조건 불변이다. 즉, 함수 본문에서 파라미터 값을 변경하면 컴파일 오류가 발생한다.
fun increment(n: Int): Int {
return n++ // Error: can't change immutable variable
}
그리고 파라미터 앞에 val이나 var를 표시할 수 없다는 점에 유의하라. 이렇게 강제하는 이유는 파라미터에 대입하는 중에 실수할 가능성이 높을 뿐 아니라 파라미터를 불변 값으로 강제하는 편이 더 깔끔하고 이해하기 편한 코드를 만들어내기 때문이다.