anonymous function, 익명함수
func calculator(n1: Int, n2: Int, oper:(Int, Int) -> Int) -> Int {
return oper(n1, n2)
}
func add(n1: Int, n2: Int) -> Int {
return n1 + n2
}
calculator(n1: 12, n2: 3, oper: add(n1:n2:))
calculator(n1: 1, n2: 1111, oper: add)
위의 코드를 줄인다 ... 지금도 충분히 짧아 보이는데?
func 키워드와 함수이름 제거
calculator(n1: 12, n2: 3, oper: multi(n1:n2:))
~~func multi~~(n1: Int, n2: Int) -> Int {
return n1 + n2
}
오픈 중괄호를 맨앞으로 , 파라미터뒤에 in 키워드 넣기
calculator(n1: 12, n2: 3, oper: multi(n1:n2:))
{ (n1: Int, n2: Int) -> Int in
return n1 * n2
})
operator 변수 자리에 넣기
calculator(n1: 1, n2: 1111, oper: { (n1: Int, n2: Int) -> Int in
return n1 * n2
})
코드를 더 줄이기 극한의 코드 없애기... 삼항연산자를 싫어하는 제 스타일은 아니네요😮💨
calculator(n1: 1, n2: 1111, oper: { (n1: ~~Int~~, n2~~: Int~~) ~~-> Int~~ in
~~return~~ n1 * n2
})
좀 더 할 수 있어 !🤢
calculator(n1: 1, n2: 1111, oper: { (n1, n2) in n1 * n2})
달러 키워드로 매개변수 통일
calculator(n1: 1, n2: 1111, oper: { $0 * $1})
한번더!!! 🤮
calculator(n1: 1, n2: 1111) {$0 * $1}
...
정리를 하자면, 매개변수로 함수를 받는 경우에 클로저개념을사용하면 위와 같이 구현할 수 있다.
let array = [1,2,3,4]
func addOne(num: Int) -> Int {
return num + 1
}
array.map(addOne(num:))
var res = array.map{$0 + 1}