문제

내 동료는 C#을 처음 접했으며 Coalesce 운영자에 대해 알지 못했습니다. 그래서 나는 그가 다음과 같은 코드 라인을 작성하는 것을 보았습니다.

string foo = "" + str;

STR이 null이면이 표현식이 빈 문자열을 반환한다는 생각입니다. 물론, 그것은 이것으로 다시 작성 될 수 있습니다.

string foo = str ?? "";

그리고 나는 그것이 더 읽기 쉬울 것이라고 생각합니다. 그러나 정말 큰 거래입니까? 가독성 혜택이 되돌아 가서 해당 라인을 두 번째로 보이게 할만 큼 충분한가요? 아니면 이것이 내가 놓아주는 법을 배워야 할 것들 중 하나입니까 (내 동료가 미래에 이것을하는 가장 좋은 방법에 대해 교육을받는 경우)?

편집하다: 단지 메모, 효율성 의견에 감사하지만, 이는 그 성능이 중요한 상황에서는 실제로 사용되지 않습니다. 따라서 그 정보는 흥미롭지 만 반드시 내가 느끼는 것이 중요하지는 않습니다.

도움이 되었습니까?

해결책

IMO, 그러한 논리를 명확하게 정의하는 것이 훨씬 낫습니다. 즉, 널 문자열을 피하고 조건부 명령문을 사용하기 위해 문자열 연결을 사용하지 않습니다. 운영자.

다른 의견과 관련하여 :

널 코일 레싱 연산자를 사용하는 데있어 성능 이점도 있습니다.

사실이 아니다. C# 컴파일러는 "" + string2를 String1과 100% 동일한 코드로 컴파일합니까 ?? "". 또한 C# Compiler는 + 연산자를 string.concat 메소드로 호출하도록 번역합니다.이 경우이 경우에는 새 문자열을 할당하지 않습니다.

또한 나는 string.empty over "" "가 일정하고 새 문자열의 생성이 필요하지 않기 때문에 사용하는 것을 권장합니다.

.NET Framework가 지원합니다 문자열 인턴 그래서 ""및 string.empty는 동일한 메모리 영역을 가리 킵니다.

다른 팁

나는 하나가 개인적으로 다른 사람보다 더 읽을 수 없다고 생각합니다. 나는 이것을 선호한다 :

string foo = str ?? "";

단순히 내가 정말 좋아하기 때문에 ?? 운영자.

당신이 브랜드 초보자라면, 나는 이것이 이해하기가 조금 더 쉽다고 생각합니다.

string foo = str == null ? "" : str;

또는

string foo = "";
if (str != null) foo = str;

그러나, 당신은 "당신은 정말로 얼마나 간단하게 얻고 싶습니까?"

기술적 인 관점에서 두 번째 줄을 선호하지만 첫 번째 줄은 실제로 더 읽을 수 있습니다 ...

두 번째 줄은 나에게 더 읽기 쉬워 보이며, 오른쪽 표현의 의도를 분명히합니다.

나는 두 번째 예제보다 먼저 당신의 두 번째 예제를 선호합니다. str 무효이며 더 표현력이 있습니다. 또한 사용을 추천합니다 String.Empty ~ 위에 "" 일정하고 새로운 창조를 요구하지 않기 때문에 String (그렇습니다. 이것은 극단적 인 nitpick이지만 주목하는 것이 중요합니다).

나는 Coalesce 연산자를 사용할 것입니다 foo = str == null ? "" : str; 두 가지 이유로 :

  1. 첫 번째 예제는 다른 곱슬 형 언어 (특히 Java 및 JavaScript)에서 동일한 동작을 가지고 있지 않으며, 빈 문자열에 대한 널리 참조를 추가하면 텍스트가 포함 된 문자열이 나타납니다. null. 결과적으로 첫 번째 예는 저술 된 언어의 올바른 행동을 초래할 수 있도록 훨씬 더 많은 정신적 노력이 필요합니다. 다른 단서조차도 C#입니다 (예 : 소문자 유형 string), 개발자가 속도를 늦추고 "이 코드의 의도는 무엇인가"를 생각 해야하는 것은 생산성이 손상됩니다. 언어에서 언어로 이동할 때 버그를 도입 할 수도 있습니다.

  2. 두 번째 예제는 더 명확하게 표현됩니다 의지 원래 질문에 설명 된대로 코드 중

    when str is null set foo to an empty string

    첫 번째 예와 반대로, 다음과 같이 읽을 수 있습니다.

    set foo to an empty string with str appended (which may have the side effect of setting foo to an empty string when str is null)

프로그래머로서 우리는 아마도 의지 우리의 코드 중에서, 우리가 원하는 결과를 제공하기 위해 다른 작업의 부작용에 의존하기보다는 우리의 코드입니다.

다음은 String.empty vs ""에 관한 기사입니다. ""

http://blogs.msdn.com/brada/archive/2003/04/22/49997.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top