암시 적으로 형식화 된 지역 변수 사용
이 질문에 이미 답변이 있습니다.
- var가 왜 나쁜 것일까 요? 17 답변
방금 ReSharper 평가판을 설치했는데 가장 먼저 눈 에 띄는 점 중 하나는 명시 적으로 입력 된 지역 변수를 암시 적으로 입력 된 변수로 대체 할 것을 항상 제안한다는 것입니다. 예 :
public string SomeMethod(int aParam)
{
int aNumber = SomeOtherMethod(aParam);
// should be changed to:
var aNumber = SomeOtherMethod(aParam);
}
명시 적으로 입력 된 변수가 더 읽기 쉽다고 생각합니다 (더 명시 적).
ReSharper의 제안에 대해 어떻게 생각하십니까? 암시 적으로 형식화 된 변수를 사용하면 어떤 이점이 있습니까? 암시 적 / 명시 적 변수는 언제 사용합니까?
개인적으로 "var"는 선언 만 읽어도 Type 변수를 명확하게 구분할 수있을 때만 사용합니다. 예를 들면 다음과 같습니다.
var someVariable = new List<int>();
위의 예에서 "var"는 "List <int>"를 나타냅니다.
변수 유형 "var"가 나타내는 변수 유형을 알아 내거나 Visual Studio intelli-popup 또는 호출되는 모든 것에 의존해야 할 때 메서드 정의로 이동해야 할 때 "var"를 사용하는 것을 좋아하지 않습니다. 나에게 좋지 않음 :
var someVaraible = SomeMethod();
내 말은, "SomeMethod"함수는 무엇을 반환해야합니까? 코드 줄만 봐도 알 수 있습니까? 당신은 할 수 없습니다. 그래서 이러한 상황에서“var”를 사용하지 않는 것입니다.
이것에 대해 많은 논의가 있지만 거의 모든 곳에서 'this'키워드를 사용하는 것처럼 모든 것이 개인적인 취향에 달려 있다고 생각합니다.
저는 개인적 으로 명시 적으로 형식화 된 변수를 선호하지만 중첩 된 제네릭 컬렉션을 사용할 때 암시 적으로 형식화 된 변수를 사용하면 더 쉽게 읽을 수 있습니다. 보다:
Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();
대 :
var myDictionary = new Dictionary<string, Dictionary<string, string>>();
편집 :이 SO 주제는 몇 가지 멋진 답변과 함께 동일한 주제를 다룹니다. 무엇을 사용해야합니까 : var 또는 개체 이름 유형?
EDIT2 : 요즘 비동기로 많이 작업하면서 명시 적으로 형식화 된 변수를 사용하면 때때로 불쾌한 버그를 방지 할 수 있습니다. 사용자의 ID를 반환하려는이 어리석은 예를 고려하십시오. 또한 고려 GetUserAsync
리턴한다을 Task<User>
. 암시 적으로 형식화 된 변수를 사용하면 다음과 같은 것을 사용하게됩니다.
public long GetUserId()
{
var user = GetUserAsync();
return user.Id;
}
이것은 컴파일되지만 잘못되었습니다. '사용자'는 실제로 Task<User>
. 그리고 그것은 Task
또한 Id
속성을 가지고 있기 때문에 컴파일됩니다 . 이 경우 실수로 사용자 대신 작업의 ID를 반환합니다.
public long GetUserId()
{
User user = GetUserAsync();
return user.Id;
}
위의 코드는 컴파일되지 않습니다. 컴파일러는 태스크를 사용자에게 캐스팅 할 수 없다고 불평 할 것입니다. await
물론 키워드를 추가하면 이 문제가 해결됩니다.
나는 실제로 한 번 나에게 이런 일이 일어났습니다 :-)
일부 사용자가 아직 알아 차리지 못한 경우를 대비하여 Reshaper에서 "제안"을 쉽게 변경할 수 있습니다 (Reshaper-> 옵션-> 언어-> 컨텍스트 작업-> "명시 적 유형 사양을 'var'로 대체").
개인적으로 모든 곳에 명시적인 유형 사양을 선호하지만 너무 까다 롭지는 않습니다.
특히 제네릭이 포함될 수있는 경우에는 거대한 유형 이름보다 var 의사 키워드를 입력하는 것이 더 쉽습니다. 그러나 기능적으로 동일하다는 것을 알아야합니다. 성능 차이나 어떤 방법도 없습니다. 컴파일러는 할당의 오른쪽 유형을 파생하고 var를 해당 유형으로 바꿉니다. VB 변종처럼 런타임에 발생하지 않습니다.
FWIW, var 키워드는 많은 경우에 쉽게 읽을 수 있습니다. 특히 ...
할당의 오른쪽은 생성자 표현식입니다.
var map = new Dictionary> ();
지역 변수에는 좋은 이름이 있습니다.
HTH
참고 URL : https://stackoverflow.com/questions/650919/using-implicitly-typed-local-variables
'Nice programing' 카테고리의 다른 글
CSS에서 : hover 효과를 어떻게 지연시킬 수 있습니까? (0) | 2020.11.23 |
---|---|
글꼴 색상을 변경하는 방법은 무엇입니까? (0) | 2020.11.23 |
T-SQL의 정렬 된 테이블에서 M 행부터 N 행을 가져 오는 방법 (0) | 2020.11.23 |
CSS가있는 물결 모양 (0) | 2020.11.22 |
모든 Excel 시트 끝에 명명 된 시트를 추가하는 방법은 무엇입니까? (0) | 2020.11.22 |