yoogail105/KkokkoSwift

# 고차함수

Opened this issue · 1 comments

#고차함수

  • 다른 함수를 전달 인자로 받거나, 함수 실행의 결과를 함수로 반환하는 함수
  • 스위프트의 함수는 일급객체 이다! 🔗 #40
    함수의 전달인자로 전달 하거나, 함수의 결과 값으로 반환할 수 있다.

고차함수의 종류

  • map
  • filter
  • reduce
  • forEach
  • compactMap
  • flatMap

Map(_:)

image

  • 기존의 컨테이너의 요소들에 대해 정의한 클로저로 매핑한 결과를 담은 새로운 컨테이너를 반환
  • 데이터를 변형하고자 할 때 사용
  • 기존의 데이터를 변형하지 않음
  • for-in과 유사한 기능
    • 차이점: 코드 간결, 재사용 용이, 컴파일러 최적화 성능?

Map 사용하기

image

- T타입의 transform을 매개변수로 받아서, T타입의 배열 [T]를 생성 - 파라미터: transform - a mapping closure - 파라미터로 시퀀스의 요소를 받아들여서, 같거나 다른 타입의 **변형된 벨류*transformed value*를 반환**한다. - 리턴 값: [T] - 변형된 시퀀스 요소들을 가지고 있는 배열(컨테이너)

사용하기

  • lowercase strings로 변형하고, 글자수를 세어서 새로운 배열에 할당하는 예제
  • map 사용
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
let letterCounts = cast.map { $0.count }

// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
// 'letterCounts' == [6, 6, 3, 4]
  • for-in 사용
    • map을 사용했을 때보다 코드가 길어진다.
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
var lowercaseNames = [String]()
var letterCounts = [Int]()

for element in cast {
    lowercaseNames.append(element.lowercased())
    letterCounts.append(element.count)
}

🔖 출처