Record 특이한 문법

이걸 카테고리를 어디다 해야할지 몰라서 일단 자유게시판으로 했습니다.

Record 변수를 Operator 연산자로 정의하는 법이라고 하는데
생소한 문법이라 저는 설명드리기 좀 어려울것 같고
잘아시는분이 있다면 부연 설명해주면 좋지 않을까 하고 공유해봅니다.

public record LaunchStatus
{
    public static readonly LaunchStatus Green = new(0);
    public static readonly LaunchStatus Red = new(1);

    public int Status { get; }
    private LaunchStatus(int status) => Status = status;
    public static bool operator true(LaunchStatus x) => x == Green;
    public static bool operator false(LaunchStatus x) => x == Red;
}

이렇게 Record 변수를 선언하고 안에 operator 를 정의합니다
이 Record는

LaunchStatus launchstatus;
launchstatus = LaunchStatus.Green;
Console.WriteLine(launchstatus.Status);
launchstatus = LaunchStatus.Red;
Console.WriteLine(launchstatus.Status);
launchstatus = LaunchStatus.Green;
Console.WriteLine(launchstatus.Status);

이렇게 정의된 Record 변수에 상수값을 넣는것에 따라

image

Record 값을 operator 해서 출력이 가능합니다.

뭔가 ?? 좋은 방법인것 같은데 …
image
뭐가 좋은지 설명하기가 힘들군요 …

마찬가지로 원 출처에서도
image
이분도 이게 필요할까? 의문을 표시합니다.

image

원작자분은 JS,TS 스타일이고 이런것이 가능하다 소개정도 하시는것 같습니다.

고정된 정의된 Input 에 따라 Record output 변수를 연산을 해서 변환 시킬수 있을것 같은데

6 Likes

record 문법 보다는 truefalse 연산자에 대한 스니펫? 정도로 생각하면 될 것 같습니다.
해당 MSDN에서도 비슷하게 소개하고 있습니다.

해당 문법을 알아야 해석할 수 있어서 직관적이라고 생각하지는 않지만 이런 문법은 신기하네요 :slight_smile:

2 Likes

마지막에 Console.WriteLine(launchstatus); 인 것이지요? 팁 게시판으로 고고싱 하셔도 될 듯 합니다.

2 Likes

image

그렇게 하면 이렇게 출력되네요

1 Like

Record의 특이한 문법이라기보다는 true와 false가 기존의 "+"와 같은 연산자로 취급한다는 점이 특이하다고 보면 될 것 같습니다.

참고로, 연산자라고 해서 모두 overloading이 되는 것은 아니고 그중 일부만 재정의가 가능합니다.

Operator overloading - Define unary, arithmetic, equality, and comparison operators. | Microsoft Learn

4 Likes

오늘 처음봤는데 뭔가했더니 맘에쏙드네요,
js나 쉘에서 && || 을 가지고 절차를 제어하는 스타일을 C#에서 재정의하여 표현할수 있도록한거군요

예제를 봐도 바로 이해하기엔 조금 난해해서 직접 테스트해보면서 정리를 해봤습니다.
ConditionalLogicalOperators.ipynb (github.com)

4 Likes

죄송하지만 TIP 이나 검색을 위해서 제목을 변경해야 할것 같은데 추천하는 제목이 있을까요??

image

대단하시네요 저는 이해는 잘못했지만 뭔가 촉이 와서 한번 공유해봤습니다.

2 Likes