보통 c++ 람다같은거 검색하면 이러잖아요
vector안의 모든 원소를 곱하는 코드가 있다...
int multi;
for(auto& i : vectorInt)
{
multi*=i;
}
이거보다
int multi;
for_each(vectorInt.begin(); vectorInt.end();
[&multi](int i){ multi*=i; });
람다를 쓴 이게 더 깔끔하다!!!
이런식으루 람다의 강력함을 표현하는데
아직 개좃밥이라그런지 아래가 더 깔끔한건지 전혀 모르겟다는거에요..
그런데 다들 람다를 강조하니까 저도 막 람다를 어딘가써보고싶은데 막상 쓸 각은 안나오고
뭐 어디 멋지게 실무같은데 적용한 코드같은거보면 참 좋을거같은데 읔읔
람다는 나중에 라이브러리 건들일있을때 진가를 깨닫게되는데 지금은 그냥 이런게 있다고 넘어가도됨 그냥 간단한 예를 들자면 algorithm 헤더파일의 sort에서 사용자 기준으로 정렬을 할수있는데 이때 1회용 함수를 만들어 넣으면 번거로우니까 익명함수로 때려박고 짬때리고 지나가면 쉽고 가독성도 눈에 들어옴
함수포인터 대신 람다를 쓰면 좋다는건 알겠는뎅.. 뭐 콜백이런데는 확실히 좋을거라고 생각하지만... 제가 본문에 써넣은 for_each도 algorithm 라이브러리에 있는 함수잖아여... 그런데 다르게 표현했을때도 충분히 간결한거같은데 람다를썻다고 무조건 간결한가?? 이런 의문이있었는데 그런건 아닌가보네용
람다는 함수형 프로그램의 원리(람다 카큘러스, 익명함수) c++에 넣기위하여 최근들어서서 생긴 새로운 개념인데 람다와 c++의 functional 헤더파일을 이용하면 함수를 객체처럼 파라미터에 자유롭게 갈아끼울수있음(함수 포인터와 비슷) 근데 별로 좋은방법은 아닌거같고 함수형프로그래밍이 뭔고 원리가 무엇인지만 대충 알면 될거같음
해당 댓글은 삭제되었습니다.
그럼 for_each에 람다를 바로 쳐박는건 별루 의미가 없다는건가요?? std::function 같은걸루다가 람다를 객체로 만들어서 외부로 빼는게 좋은건가보네요... 그럼 이렇게 여러번 재활용할거면 왜 그냥 함수만들지 람다써?? 라는 의문이 들긴 하는데... 먼가 멤버함수같은거로 만들기엔 너무 간단한 함수들?? 을 만들어쓰면 되겟군요
그런방법도있군요 한수배우고갑니다...
람다는 c++에서 나온 유래를 보면 좀더 이해가 쉽고 나중에 다른언어로 확장해서 이해하기가 매운 쉬운 개념임
원래 대표적으로 c++ STL의 알고리즘을 쓰게되면 인자값으로 넘기는게 함수포인터뿐이 없었다. 근데 함수포인터의 단점중 하나가 런타입에 객체의 타입이 결정된다라는 거지... 이거때문에 Inline화를 시킬수없게 되고 결국 이문제는 속도개선이 필요한 프로그램에서 큰 문제가 된다. 이래서 람다가 나오기전에는 c++ 에서 함수객체라는 (객체이지만 함수처럼 사용하는)것을 사용하게되었는데 이걸쓰다보면 선언하는것도 귀찮고 양도많아지면 가독성도 떨어지게된다. 하지만 함수객체는 인라인화가 가능하지... 그래서 꼭필요한 경우에는 함수객체를 사용했는데 람다가 나옴으로인해서 이문제가 깔끔하게 정리가 되었지..
니가 이걸 이해하면 컴파일과 런타임의 개념이 탑재가 된상태에서 c++ inline에 대해서 개념은 있어야한다. 그리고 함수포인터는 당연히 알아야하고 ,함수객체때문에 연산자 오보로딩도 공부하게 되고.. 나중에 여기에 템플릿 개념이 탑재되면 c#의 Function이나 Action이 왜 나오게되었는지 자연스럽게 이해가됨 ㅇㅋ?
다 아는데요. 굳이 람다를 써야하는 이유를 모르겠다는거에요
자 보세요. 함수가 복잡해지면 인라인화는 쓸모가 없잖아요. 인라인 키워드를 붙여도 요즘 컴파일러들은 아 이거 성능 안나와~~하면서 막 무시해버리는 그런함수들잇잖아요. 결국 인라인화 시킬만한 함수는 정말 간단한 함수라서 함수호출에 드는 자원이 함수가 도는데 필요한 자원보다 큰 그런것들이잖아요..... 근데 여러군데에 써먹을거면 인라인함수로 만들어 쓰면 되는거고 인라인화 시킬만한 함수면 그냥 코드내부에 박아버리면되는거지 굳이...람다를...? 이라는 의문이 든다는것이에요