struct와 class의 멤버는 대부분(주된 예외는 필드예요) 식 본문 멤버 문법을 쓸 수 있어요. 멤버를 식으로 정의하면 전통적인 블록이나 문을 사용할 때보다 더 간결하고 읽기 좋은 코드를 만들 수 있는 경우가 많아요.
메서드와 읽기 전용 속성도 식 본문으로 정의할 수 있는 멤버예요.
public int Times3(int input) => input * 3;
public int Interesting => 1729;
switch 식은 값을 여러 패턴 중 하나에 맞춰 보고, 그에 해당하는 값을 반환하거나 해당 동작을 수행할 수 있어요. 이 연결은 => 기호로 나타내요. 또한 각 패턴에는 when 키워드로 도입되는 선택적 케이스 가드를 둘 수 있어요. 케이스 가드 식이 true로 평가되어야 switch의 해당 암이 선택돼요. 케이스(또는 스위치 암)는 적힌 순서대로 평가되고, 일치하는 것을 찾는 즉시 평가가 중단되며 해당 값이 반환돼요.
double xx = 42d;
string interesting = xx switch
{
0 => "I suppose zero is interesting",
3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
3.14 => "π",
42 => "a bit of a cliché",
1729 => "only if you are a pure mathematician",
_ => "not interesting"
};
// => interesting == "a bit of a cliché"
삼항 연산자를 쓰면 if 조건을 문 블록이 아니라 식 안에서 정의할 수 있어요. 이 방식은 함수형 프로그래밍의 접근법과 닮아 있고, 코드를 더 표현력 있게 만들고 오류가 생길 가능성을 줄여 주는 경우가 많아요.
삼항 연산자는 세 개의 식을 결합해요. 조건이 하나 있고, 그다음에 조건이 참일 때 평가해서 반환할 식(?로 시작하는 if 부분)과 조건이 거짓일 때 평가해서 반환할 식(:으로 시작하는 else 부분)이 이어져요.
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
throw 식은 throw문을 대신할 수 있고, 특히 삼항 연산자나 다른 복합 식을 더 강력하게 만들어 줘요.
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
기상 관측소와 관련된 레거시 코드를 개선해 달라는 요청을 받았어요.
기상 관측소는 측정값을 받아들이고, 온도와 기압 같은 몇 가지 지표를 출력해요.
WeatherStation 클래스에서 적절한 메서드는 식 본문 멤버를 사용해 리팩터링해요. 표현력을 높이고 오류를 줄이는 데 도움이 되도록, 필요한 곳에는 삼항 연산과 switch 식을 사용해요.
모든 테스트가 계속 통과하는지 확인해요.
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.