람다 표현식은 식 형태로 되어있다고 해서 람다 표현식이라고 부른다.
람다 표현식은 함수를 간단하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용한다.
람다 표현식은 변수에 할당하지 않고 람다 표현식 자체를 바로 호출할 수 있다. (이름없는 함수의 개념!!)
한번만 쓸 함수일 경우엔 별도로 선언할 필요가 없다.
코드를 이해할 때 한번에 다 이해하고 편하게 볼 수 있다. ( 사용과 함께 선언해주기 때문에 )
람다식을 잘 알고 있는사람이라면 가독성이 장점이 되겠으나, 잘 모르는 사람에게는 가독성이 나쁜 코드가 된다.
디버깅이 어렵다 : 익명함수 기반이기 때문에, 익명함수 특성 상 함수 콜 스택 추적이 어렵다.
// case 1
view.OnClickSoundAsObservable()
.Subscribe(_ =>
{
Debug.Log("Sound 버튼 클릭");
}).AddTo(this);
// case 1-1
view.OnClickSoundAsObservable()
.Subscribe(_ => Debug.Log("Sound 버튼 클릭"))
.AddTo(this);
// case 2
view.OnClickSoundAsObservable()
.Subscribe(_ => OnClickSound(_))
.AddTo(this);
// case 2-2 뒤에 형식이 같으면 생략할 수 있다
view.OnClickSoundAsObservable()
.Subscribe(OnClickSound)
.AddTo(this);
// case2와 2-1 은 함수를 호출하는 람다 식
private void OnClickSound(Unit u)
{
Debug.Log("Sound 버튼 클릭");
}
public IObservable<string> ObserveChangeSelection() => m_OnChnageSelection.AsObservable();
처음 보면 다소 헷갈릴 수 있으나, 전체적인 형태로 보면 접근제한자 반환형식 함수명 => 리턴값
형태이다.
람다식을 빼고 표현하면
public IObservable<string> ObserveChangeSelection()
{
return m_OnChnageSelection.AsObservable();
}
형태가 된다.
더 간단한 추가 예시를 보자면 아래와 같다.
private int a = 1;
public string A() => a.ToString();
// 위 형태를 람다가 아닌 형태로 바꾸자면?
public string A()
{
return a.ToString();
}