이번 편의 목표: 연체료 계산을 함수로 빼고, 정렬처럼 짧은 비교는 클로저로 넘깁니다.
함수는 이름, 매개변수, 반환 타입을 가집니다. 호출부는 인자 이름을 함께 적습니다. 밑줄은 호출부에서 그 인자 이름을 생략하라는 표시입니다.
func lateFee(days: Int, daily: Int) -> Int {
days * daily
}
print(lateFee(days: 3, daily: 100))3과 100을 곱해 300이 출력됩니다. return을 적지 않은 한 줄 함수는 그 줄의 값을 반환합니다. 본문이 여러 줄이면 돌려줄 값에 return을 붙입니다.
함수도 값입니다. 중괄호로 만든 함수를 클로저라고 부릅니다. sorted에 비교 함수를 넘길 때 씁니다.
let prices = [1800, 12000, 9000]
let ordered = prices.sorted { left, right in
left < right
}
print(ordered)출력은 1800, 9000, 12000 순서입니다. left < right이므로 오름차순입니다. 클로저가 함수의 마지막 인자이면 괄호 밖에 중괄호를 둘 수 있습니다. 위의 sorted 호출이 그 형태입니다.
함수 안의 지역 값은 함수가 끝나면 사라집니다. 호출부가 가진 var를 함수가 직접 바꾸지는 못합니다. 바꾼 결과를 쓰려면 반환값으로 받아야 합니다. 같은 저장소를 여러 곳이 나눠 가져야 할 때는 07편의 클래스를 씁니다.
직접 해 보기
lateFee(days: 5, daily: 150)의 결과를 출력하세요. prices의 비교를 반대로 바꿔 큰 값이 앞으로 오게 하세요.
해설
5 곱하기 150은 750입니다. 비교를 left > right로 바꾸면 12000, 9000, 1800 순서가 됩니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.