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개의 좋아요

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

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

2개의 좋아요

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

2개의 좋아요

image

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

1개의 좋아요

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

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

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

4개의 좋아요

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

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

4개의 좋아요

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

image

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

2개의 좋아요