Nice programing

암시 적으로 형식화 된 지역 변수 사용

nicepro 2020. 11. 23. 19:58
반응형

암시 적으로 형식화 된 지역 변수 사용


이 질문에 이미 답변이 있습니다.

방금 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 키워드는 많은 경우에 쉽게 읽을 수 있습니다. 특히 ...

  1. 할당의 오른쪽은 생성자 표현식입니다.

    var map = new Dictionary> ();

  2. 지역 변수에는 좋은 이름이 있습니다.

HTH

참고 URL : https://stackoverflow.com/questions/650919/using-implicitly-typed-local-variables

반응형