본문 바로가기
공부하기/Swift

Swift 클로저와 일급 함수

by hyunjicraft 2019. 9. 9.

일급 시민(함수 or 객체)

1. 변수나 데이터 구조(컬렉션) 안에 담을 수 있다.
2. 파라미터로 전달할 수 있다.
3. 리턴값으로 사용할 수 있다.

 

Swift 클로저

let add: (Int, Int) -> Int = { (a: Int, b: Int) in
	return a + b 
}

let res: Int = add(1, 2)

print(res) // 3

swift의 함수는 일급함수가 아니다.

swift의 클로저는 일급함수이다.

 

함수가 일급함수인 경우 : javascript, kotlin, python ..

javascript는 함수를 변수 안에 담고, 리턴값으로 사용할 수 있다.

function calculator(mode){
    var options = {
        '+' : function(left, right){return left + right},
        '-' : function(left, right){return left - right},
        '*' : function(left, right){return left * right},
        '/' : function(left, right){return left / right}
    }
    return options[mode]; 
}

console.log(calculator('*')(2, 3));	 // 6

 

함수가 일급함수가 아닌 경우 : C ..

c는 함수 포인터를 이용하여 전달해야 한다.

#include <stdio.h>

/* 더하기 함수 */
int add(int a, int b) {
    return a + b;
}

/* 함수 포인터를 받을 결과 출력 함수 */
void printResult(int (*fp)(int, int)) {
    printf("%d\n", fp(1, 2));  
}

/* 메인 함수 */
int main()
{
    executer(add);	//3

    return 0;
}

댓글