switch식을 배우게 되면서 워낙 생소한 개념이기도 하고, 잘 쓰면 편리해 보이기도 해서 조금 더 공부해보았다.
switch식은 C# 8.0에서부터 지원하는 방식으로, 기존 switch문의 case부분을 간결하게 표현한 것이다.
기본적인 구조는 아래와 같다
(패턴/값) => 수식
Func<float, float, float> operation = modifier.statsChangeType switch
{
StatsChangeType.Add => (current, change) => current + change,
StatsChangeType.Multiple => (current, change) => current * change,
_ => (current, change) => change,
};
위 식은 .Add 로 수치 둘을 더하는 연산을 진행한다.
Multiple은 서로 곱하는 연산을 진행한다.
_ 는 Default를 의미하며, 받은 값 그대로 입력된다.
위 문법은 저런 계산식도 가능하지만 아래와 같은 구조로도 가능하다
public static class SwitchExample
{
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction) => direction switch
{
Direction.Up => Orientation.North,
Direction.Right => Orientation.East,
Direction.Down => Orientation.South,
Direction.Left => Orientation.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
};
public static void Main()
{
var direction = Direction.Right;
Console.WriteLine($"Map view direction is {direction}");
Console.WriteLine($"Cardinal orientation is {ToOrientation(direction)}");
// Output:
// Map view direction is Right
// Cardinal orientation is East
}
}
enum을 다른 enum으로 바꾸어 주는 코드이다.
화살표 우측 식에서 계산해야할 구문이 길다면 case문을 사용하는 것이 가독성이 올라갈 것으로 보이지만, 위의 예시들처럼 간단하다면 switch식을 사용하면 정말 편리할 것 같다.
다만 비교적 최신 기능이기에 남용은 좋지 않다고 한다..
추가로, 첫 예시 코드에는 다음과 같은 부분이 있다.
Func<float, float, float> operation = modifier.statsChangeType switch{
}
이 부분은 float 2개를 받아 float을 리턴하는 "델리게이트" 이다.
조금 더 공부해서 활용법을 더 확장시키면 좋을 것 같다..