람다함수란?
프로그래밍 언어에서 사용되는 개념으로 이름이 없는함수(익명함수)를 지칭하는 용어다.
일반 함수의 경우 선언 , 정의 , 호출의 과정이 있지만 람다식은 이를 한번에 표현한다.
▶ 장점
1.코드의 간결성: 효율적인 람다 함수의 사용을 통하여 불필요한 루프문의 삭제가 가능하며,
동일한 함수를 재활용할 수 있는 여지가 커진다.
2.필요한 정보만을 사용하는 방식을 통한 퍼포먼스 향상: 지연 연산을 지원하는 방식을 통하여
효율적인 퍼포먼스를 기대할 수 있다.
이 경우 메모리 상의 효율성 및 불필요한 연산의 배제가 가능하다는 장점이 있다.
▶ 단점
1.어떤 방법으로 작성해도 모든 원소를 전부 순회하는 경우는 람다식이 조금 느릴 수 밖에 없다.
(어떤 방법으로 만들어도 최종 출력되는 bytecode나 어셈블리 코드는 단순 while(혹은 for) 문 보다 몇 단계를 더 거치게 된다.)
2.익명함수의 특성상 함수 외부의 캡처를 위해 캡처를 하는 시간제약 논리제약적인 요소도 고려해야한다.
3.람다식을 너무 남발하여 사용하게되면 오히려 코드를 이해하기 어려울 수 도 있다.
람다식 구성
[ 캡처 된 변수 ] ( 인수 ) {
lambda code
}
|
cs |
※ 캡처 : 외부변수를 람다 함수 내부로 가져온다는 의미다.
▶ 캡처모드 종류
기호 | 의미 |
[=] | 모든 외부 변수를 Capture by value |
[&] | 모든 외부 변수를 Capture by reference |
[] | 아무것도 캡처하지 않음 |
[x] | x만 Capture by valuex만 |
[&x] | Capture by reference |
[x,y] | x,y 를 Capture by value |
[&x,y] | x는 Capture by reference , y는 Capture by value |
[&, y] | y 를 제외한 모든 값을 Capture by reference |
[=, &x] | x 를 제외한 모든 값을 Capture by value |
예시
1. 모든 변수 캡처
for (int i = 0; i <= 10; i++) [=]() { qDebug() << i; }();
result : 1~10
|
cs |
2. 특정 변수만 캡처
for (int i = 0; i <= 10; i++) sum += [i]() { return i*10; }();
result : 550
|
cs |
3. QT에서 Connect에 람다표현식 사용
* QT 버전 5부터 connect 슬롯 함수에도 람다식 사용가능
connect(ui->pushButton,&QPushButton::clicked, [this](){
{
ui->pushButton->setText("Clicked button");
}});
|
cs |
유의 사항
C , Fortran , Pascal 등은 람다를 지원하지 않으며 java의 경우 8부터 , C++은 11부터 지원한다.
< 자료 참고 >
1. https://namu.wiki/w/%EB%9E%8C%EB%8B%A4%EC%8B%9D
'프로그래밍 > 시스템' 카테고리의 다른 글
C++ Qt 핑 프로그램 만들기 (0) | 2018.05.04 |
---|---|
C++ Qt 윈도우 배포용 라이브러리 추가 (0) | 2018.05.04 |
C++ Qt 잡지식 (0) | 2018.03.19 |
C++ Qt 엑셀 사용하기 (0) | 2018.03.19 |
C++ Qt XML (0) | 2018.03.19 |