고 품질 코드 를 만 드 는 30 개의 황금 수칙(암시 적 형식 변환 우선)
이 시 리 즈 는 비트 페 이 가 오리지널 로 발표 한 것 으로 3 개 월 동안 30 편의 글 을 써 서 고 품질 코드 를 작성 하 는 일반적인 준칙 을 제공 할 계획 이다.
1.개술
암시 적 형식 전환 은 마이크로소프트 가 C\#익명 형식 을 지원 하기 위해 가입 한 것 으로 var 를 사용 하면 코드 의 가 독성 을 더욱 강하 게 할 수 있 고 심지어 심각 한 성능 문 제 를 해결 하 는 데 도움 을 줄 수 있다.var 의 역할 체 제 를 명확 하 게 이해 하기 위해 서 우 리 는 먼저 컴 파일 러 가 var 를 위해 어떤 일 을 했 는 지 살 펴 보 자.
2.컴 파일 러 는 var 키 워드 를 위해 무엇 을 했 습 니까?
먼저 var 는 문법 사탕 입 니 다.컴 파일 러 는 컴 파일 할 때 오른쪽 값 에 따라 표현 식 유형 을 추정 한 다음 에 컴 파일 러 가 추정 한 표현 식 형식 을 IL 에 기록 하기 때문에 다음 과 같은 2 단 코드 는 IL 에서 완전히 일치 합 니 다.
컴 파일 기간 에 컴 파 일 러 는 오른쪽 값 인"SomeString"에 따라 이 표현 식(오른쪽 값)의 유형 을 string 형식 으로 추정 할 수 있 습 니 다.따라서 var 를 string 으로 바 꾸 고 IL 에 기록 합 니 다.따라서 상기 두 단락 에서 foo 를 초기 화 한 코드 결 과 는 완전히 일치 합 니 다.
string foo = "SomeString";
var foo = "SomeString"; 
 본문 예제 의 소스 코드
 
 DnSpy 의 역 컴 파일 결과
 
 Microsoft 기술 지원 문서 의 ldstr 설명
메모:string 도 문법 사탕 입 니 다.컴 파일 할 때 string 은 System.String 으로 바 뀌 어 IL 에 씁 니 다.
그래서 우 리 는 중요 한 결론 을 얻 었 다.
var 는 문법 사탕 으로 컴 파일 기간 에 컴 파일 러 에 의 해 결정 되 었 고 개발 자 는 컴 파일 러 에 유형 을 결정 할 수 없습니다.
암시 적 유형 이 상기 코드 로 전환 되 는 것 은 좋 은 가 독성 을 가 져 왔 습 니 다.모든 개발 자 는 두 번 째 줄 코드 의 var 유형 을 알 게 될 것 입 니 다.이 는 코드 세 션 에서 우리 가 주목 해 야 할 부분 에 더욱 관심 을 가지 게 합 니 다.그 유형 에 중점 을 두 는 것 이 아 닙 니 다.대부분 의미 가 없 기 때문이다.
3.암시 적 유형 전환 이 가 져 온 좋 은 가 독성
좋 은 가 독성 문 제 를 이해 하기 위해 서 우 리 는 먼저 코드 세 션 을 보 겠 습 니 다.
var foo = new SomeType();
var huaWei = PhoneFactory.CreatePhone();
var result = someObject.DoSomething(someParameter);1.여기 서 result 라 는 변수 이름 은 가장 좋 은 선택 이 아 닙 니 다.
2.someobject 의 의미 가 불분명 하 다.
3.무언 가 모호 하지 않 음;
4.someParameter 코드 가 무엇 인지 명확 하 게 알 수 없습니다.
다음 코드 로 바 꾸 면 상황 이 많이 좋아 질 것 입 니 다.
var mostPopularPhone = someObject.DoSomething(someParameter);
Phone mostPopularPhone = someObject.DoSomething(someParameter);우리 다시 새로운 예 시 를 보 자.
var score = GetSomeNumber();
 
var rate = score / 100;
var score = GetSomeNumber();
 
double rate = score / 100;그래서 우 리 는 두 가지 총 결 을 얻 었 다.
1.의미 가 명확 하고 코드 문맥 이 비교적 명확 할 때(간단 한 변수 정의 나 공장 방법)var 를 우선 사용 하 는 것 을 권장 합 니 다.
2.다른 복잡 한 상황 에서 가능 한 한 var 의 유형 을 직접 작성 합 니 다.
암시 적 유형 전환 이 가 져 온 것 은 결코 좋 은 가 독성 만 이 아니 라 가끔 발견 하기 어 려 운 bug 를 없 애 는 데 도움 을 줄 수 있 습 니 다.이것 은 어떻게 된 일 입 니까?
4.암시 적 유형 전환 은 우리 에 게 심각 한 성능 문 제 를 해결 해 준다.
사람 은 자신 이 세계 에서 가장 똑똑 한 생물 이 라 고 생각 하지만 사실은 그렇지 않다.가끔 은 컴 파일 러 가 우리 보다 훨씬 똑똑 하고 믿 을 만하 다.
다음 두 코드 세 션 을 살 펴 보 겠 습 니 다.
public IEnumerable<string> GetPhoneStartsWith1(string prefix) {
  IEnumerable<string> phones =
          from r in db.Phones
          select r.PhoneName;
 
  var result = phones.Where(r => r.StartsWith(prefix));
  return result;
}
public IEnumerable<string> GetPhoneStartsWith2(string prefix) {
  var phones =
    from r in db.Phones
    select r.PhoneName;
 
  var result = phones.Where(r => r.StartsWith(prefix));
  return result;
} IQueryable<string>이 어야 합 니 다.그러나 여기 서 명시 적 으로 설 명 된 phones 의 IEnumerable그래서 GetPhone Starts With 1 방법 은 데이터베이스 에 있 는 가능 한 모든 데 이 터 를 모두 로 컬 로 되 찾 은 다음
 var result = phones.Where(r => r.StartsWith(prefix)); 로 컬 필 터 를 실행 하여 네트워크 자원 을 너무 많이 소모 하고.Net 의 데이터 필터 메커니즘 을 사용 했다.GetPhone Starts With 2 방법 은 그렇지 않 습 니 다.phones 의 유형 은 컴 파일 러 에 의 해
IQueryable<string>로 추정 되 고 이 로 인해 조회 작업 을 수행 하지 않 습 니 다.진정한 조회 동작 은var result = phones.Where(r => r.StartsWith(prefix));에 의 해 실 행 됩 니 다.즉,그의 데이터 여과 동작 은 데이터 베이스 엔진 에 의 해 연산 되 고 최종 적 으로 조건 에 맞 는 데 이 터 를 로 컬 로 보 내 며 네트워크 전달 원 가 를 절약 할 수 있 습 니 다.또 연산 원 가 를 절약 하 였 는데,어찌 일거양득 이 아니 겠 는가?5.총화
이 시 리 즈 는 비트 페 이 가 오리지널 로 발표 한 것 으로 3 개 월 동안 30 편의 글 을 써 서 고 품질 코드 를 작성 하 는 일반적인 준칙 을 제공 할 계획 이다.
총결산
고 품질 코드 를 만 드 는 30 가지 황금 수칙(암시 적 형식 변환 우선)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.고 품질 코드 를 만 드 는 30 가지 황금 수칙 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 코드 주석 사양(동력 노드 정리)코드 주석은 프로그래머와 프로그래머 간의 통신 다리를 놓아 팀 개발 협력 효율을 최대한 높인다.프로그램 코드의 유지보수성의 중요한 부분 중 하나이기도 하다.그래서 우리는 주석을 쓰기 위해 주석을 쓰는 것이 아니다.다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.