[미디엄] 간단한 C# .NET 9 패턴 매칭 하나 소개

[미디엄] 간단한 C# .NET 9 패턴 매칭 하나 소개

글 : Clean Code in .NET 9: Writing Maintainable and Elegant Code
저자 : Adem KORKMAZ

이전 방법(바꾸기 전, 나쁜 방법)

public string GetUserFullName(User user)
{
    if (user != null)
    {
        if (!string.IsNullOrEmpty(user.FirstName) && 
            !string.IsNullOrEmpty(user.LastName))
        {
            return user.FirstName + " " + user.LastName;
        }
    }
    return string.Empty;
}

새로운 방법(바꾸기 전, 좋은 방법)

public string GetUserFullName(User user) => 
    user is { FirstName: not null, LastName: not null } 
        ? $"{user.FirstName} {user.LastName}" 
        : string.Empty;
2개의 좋아요

개인적으로 나쁜 코드 사례가 마냥 나쁘다고 생각하지는 않습니다. 좀 더 눈으로 해석하기 쉽기 때문(제가 옛날 사람 이여서 일수도 있어요)입니다. 나쁜 코드 보다는 이전 방식이 어떨까요? 그리고 좋은 코드 대신 현대 방식이 좀 더 적절할 것 같습니다.

12개의 좋아요

not null 패턴에서 IsEmpty 체크도 되는건가요?
안된다면 로직자체가 다른 메서드 같은데…

3개의 좋아요

Empty도 패턴매칭 할 수 있어요.

https://www.tabsoverspaces.com/233939-writing-string-isnullorempty-using-pattern-matching-and-comparing-the-resulting-code

4개의 좋아요

와 이거 패턴매칭은 생각도 못했네용ㅋㅅㅋ

근데 요건 그냥 string.IsNullOrEmpty() 가 더 눈에 잘 들어오는 듯 ㅋㅋㅋ

그리고 빈문자열 체크는 string.IsNullOrWhiteSpace() 로 강력 추천.
(간혹 공백이 섞이는 경우가 있어서 이제는 요걸로 그냥 쓰는게 맘편함ㅋ)

5개의 좋아요

@레스티 님 말씀대로 첨부된 코드는 null 체크만 되고 IsEmpty 체크는 되지 않아서 완전히 동일한 동작을 하는 코드는 아니에요.

@Chris_Shim 님께서 첨부한 아티클처럼 FirstName : { Length: > 0 }으로 검사하거나, 더 간략화해서 FirstName.Length: > 0으로 검사해야 IsEmpty 체크가 가능합니다.

본문에 첨부된 코드를 바꿔보면 다음과 같은 형태가 되겠네요.

public string GetUserFullName(User user) =>
    user is { FirstName.Length: > 0, LastName.Length: > 0 }
    ? $"{user.FirstName} {user.LastName}"
    : string.Empty;

그런데 이 코드도 문자열이 공백으로만 구성된 경우는 검출하지 못합니다. 이때는 string.IsNullOrWhiteSpace()를 사용해야 합니다.

4개의 좋아요

저는 이러면 제일 좋다고 할거 같아요

public static string FullName(this User user) => user switch
{
   { FirstName: {} first, LastName: {} last } => $"{first} {last}",
   _ => throw new("what the nameless")
};

패턴매칭이 nullsafe하게 데이터를 추출해주는 역할까지는 훌륭하지만
유효한 이름과 같이 어떤 문화적 의미를 만족하는 데이터조합인지까지 검증하는건
개인적으로 작정하고 별도의 조건을 달아야 한다고 생각해요.
사람이름이 null, “”, " " 만 아니면 다 괜찮은것도아닌데 저것들만 우선 걸러낸다고 특별히 시스템 효율이나 안전성에 기여하는거같진 않아보여서요

그런검증을 위한 정규표현식도 패턴매칭이랑 잘어울리는편이라 좋아합니다.

5개의 좋아요