C# 3.0에서는 *항상* 암시적으로 유형이 지정된 지역 변수를 선호해야 합니까?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

문제

리샤퍼 확실히 그렇게 생각하고 즉시 전환하라고 잔소리할 것입니다.

Dooberry dooberry = new Dooberry();

에게

var dooberry = new Dooberry();

그게 정말 최고의 스타일로 여겨지나요?

도움이 되었습니까?

해결책

물론 스타일의 문제이지만 저는 Dare의 의견에 동의합니다. C# 3.0 암시적 유형 선언:var로 할 것인가, 아니면 var로 하지 않을 것인가?.명시적인 유형 대신 var를 사용하면 코드를 읽기가 더 어려워질 것 같습니다. 다음 코드에서:

var result = GetUserID();

결과는 무엇입니까?정수, 문자열, GUID?예, 중요합니다. 아니오, 알기 위해 코드를 파헤칠 필요는 없습니다.특히 코드 샘플에서는 짜증스럽습니다.

Jeff는 이에 대해 다음과 같이 글을 썼습니다. 그는 var를 선호한다.그런데 그 사람은 미쳤어요!

stackoverflow 성공 패턴이 보입니다.오래된 CodingHorror 게시물을 찾아 (Jeopardy 스타일) 질문에 맞게 표현하세요.

다른 팁

나는 var가 무엇인지 확실히 알 수 있을 때만 사용합니다.

나에게 분명하다:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

나에게는 명확하지 않습니다.

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

내가 본 답변의 가장 좋은 요약은 다음과 같습니다. 에릭 리퍼트의 코멘트, 이는 기본적으로 유형이 무엇인지가 중요할 경우 구체적인 유형을 사용해야 하지만 그렇지 않은 경우에는 사용하지 말아야 함을 의미합니다.기본적으로 유형 정보는 유형이 중요한 위치에 대해 예약되어야 합니다.

우리 회사의 표준은 어디에서나 var를 사용하는 것입니다. 다양한 권장 사항을 읽은 다음 주석이 달린 유형 정보의 부족이 도움이 되었는지 방해가 되었는지 알아보기 위해 시간을 냅니다..우리는 그것이 도움이라고 느꼈습니다.

사람들이 링크한 대부분의 추천(예:Dare's one)은 구체적인 유형 대신 var를 사용하여 코딩을 시도해 본 적이 없는 사람들이 권장하는 것입니다.이로 인해 권장 사항은 거의 쓸모가 없게 됩니다. 왜냐하면 경험에서 나온 것이 아니라 단지 추정일 뿐이기 때문입니다.

제가 드릴 수 있는 최고의 조언은 직접 시도해 보고 무엇이 귀하와 귀하의 팀에 적합한지 확인하라는 것입니다.

@ Jongalloway - var가 반드시 코드를 더 읽기 어렵게 만드는 것은 아닙니다.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

첫 번째는 두 번째와 마찬가지로 읽기 쉽고 작업이 덜 필요합니다.

var myvariable = ResultFromMethod();

여기에 요점이 있습니다. var는 코드를 읽기 어렵게 만들 수 있습니다.나는 var를 좋아합니다. 왜냐하면 소수를 double로 바꾸면 여러 곳에서 바꿀 필요가 없기 때문입니다. (그리고 리팩토링이라고 말하지 마세요. 때로는 잊어버릴 때도 있습니다. 그냥 var로 놔두세요!)

편집하다: 그냥 기사를 읽어보세요. 동의합니다.ㅋㅋㅋ.

나는 이것이 Stack Overflow에서 시간이 지나면서 가장 인기 있는 질문 중 하나가 될 것이라고 생각합니다.선호도에 따라 결정됩니다.당신이 생각하는 것이 무엇이든 더 읽기 쉽습니다.유형이 오른쪽에 정의되어 있으면 더 간결하기 때문에 var를 선호합니다.메서드 호출에서 변수를 할당할 때 명시적인 형식 선언을 사용합니다.

@이에 관해 좋은 토론이 있었습니다. 코딩 호러

개인적으로 나는 그 사용을 최소한으로 유지하려고 노력하는데, 특히 메서드 호출에서 변수를 할당할 때 가독성이 떨어지는 것을 발견했습니다.

ReSharper와 같은 도구의 장점 중 하나는 원하는 대로 코드를 작성할 수 있고 나중에 유지 관리하기 쉬운 형식으로 다시 포맷할 수 있다는 것입니다.사용 중인 실제 유형이 표시되도록 항상 형식을 다시 지정하도록 R#을 설정했지만 코드를 작성할 때 거의 항상 'var'을 입력합니다.

좋은 도구를 사용하면 두 가지 장점을 모두 누릴 수 있습니다.

남자.

유형을 미리 모르는 경우에만 의미가 있습니다.

"최고의 스타일"은 주관적이며 상황에 따라 다릅니다.

때로는 엄청나게 긴 클래스 이름을 입력하는 대신 또는 주어진 함수의 반환 유형이 확실하지 않은 경우 'var'을 사용하는 것이 훨씬 더 쉽습니다.나는 Linq를 다루거나 for 루프 선언에서 'var'를 더 많이 사용한다는 것을 알았습니다.

어떤 경우에는 전체 클래스 이름을 사용하는 것이 'var'보다 코드를 더 잘 문서화하므로 더 유용합니다.

결정을 내리는 것은 개발자의 몫이라고 생각합니다.은탄환은 없습니다."하나의 진정한 길"은 없습니다.

건배!

아니 아니 언제나 그러나 나는 많은 시간을 말할 것입니다.유형 선언은 헝가리어 표기법보다 훨씬 유용하지 않습니다.유형이 변경될 수 있다는 동일한 문제가 여전히 있으며 리팩토링 도구가 도움이 되기 때문에 Don't Repeat Yourself 다음에 오는 단일 위치를 제외하고 유형이 지정된 위치를 변경할 필요가 없는 것과 비교하면 이상적이지 않습니다. 원칙.

변수와 해당 값 모두에 대해 유형 이름을 지정할 수 있는 단일 행 명령문은 반드시 var를 사용해야 합니다. 특히 긴 Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>>인 경우에는 더욱 그렇습니다.

거기에 정말 좋은 MSDN 기사 이 주제에서는 var를 사용할 수 없는 몇 가지 사례를 간략하게 설명합니다.

암시적으로 유형이 지정된 변수 선언에는 다음 제한 사항이 적용됩니다.

  • VAR은 동일한 문서에서 로컬 변수가 선언되고 초기화 될 때만 사용할 수 있습니다.변수는 null 또는 메소드 그룹 또는 익명 함수로 초기화 할 수 없습니다.
  • var는 클래스 범위의 필드에 사용할 수 없습니다.
  • VAR을 사용하여 선언 한 변수는 초기화 표현식에서 사용할 수 없습니다.다시 말해,이 표현은 합법적입니다.int i = (i = 20);그러나이 표현식은 컴파일 타임 오류를 생성합니다.var i = (i = 20);
  • 동일한 문서에서 다중 내재 된 변수를 초기화 할 수 없습니다.
  • VAR이라는 유형이 범위 인 경우 VAR 키워드는 해당 유형 이름으로 해결되며 암시 적으로 입력 한 로컬 변수 선언의 일부로 취급되지 않습니다.

코드에서 var 사용의 전체 의미를 이해하려면 이 내용을 확인하는 것이 좋습니다.

StackoverFlow 성공을위한 패턴을보고 있습니다.오래된 CodingHorror 게시물을 파고 (Jeopardy Style) 질문의 관점에서 구절하십시오.

나는 무죄를 주장한다!하지만 당신 말이 맞아요. 이것은 상대적으로 인기 있는 작은 질문인 것 같았습니다.

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