일반적인 용도로 자동차를 싫어하는 데는 몇 가지 이유가 있습니다.
- 코드를 수정하지 않고 리팩토링 할 수 있습니다. 예, 이것은 종종 자동 사용의 이점으로 열거 된 것 중 하나입니다. 함수의 반환 유형을 변경하기 만하면 호출하는 모든 코드가 자동을 사용하면 추가 노력이 필요하지 않습니다! 컴파일하고, 0 경고, 0 오류를 빌드하면 함수가 사용되는 80 곳을 살펴보고 잠재적으로 수정하는 혼란을 처리하지 않고도 코드를 체크인 할 수 있습니다.
하지만 잠깐, 정말 좋은 생각입니까? 이 유스 케이스의 수십 개에서 유형이 중요하고 이제 해당 코드가 실제로 다르게 작동하면 어떻게 될까요? 또한 입력 값뿐만 아니라 함수를 호출하는 다른 클래스의 개인 구현 동작 자체를 수정하여 캡슐화를 암시 적으로 중단 할 수 있습니다.
1a. 나는 "자체 문서화 코드"의 개념을 믿는 사람입니다. 자체 문서화 코드의 이유는 주석이 최신이 아니며 코드가 수행하는 작업을 더 이상 반영하지 않는 반면, 코드 자체는 명시적인 방식으로 작성된 경우 자체 설명이 필요하기 때문에 항상 최신 상태를 유지한다는 것입니다. 의도에 따라 부실한 의견과 혼동하지 마십시오. 코드 자체를 수정하지 않고 유형을 변경할 수 있으면 코드 / 변수 자체가 오래 될 수 있습니다. 예를 들면 다음과 같습니다.
자동 bThreadOK = CheckThreadHealth ();
문제는 어떤 시점에서 CheckThreadHealth ()가 리팩터링되어 부울 대신 오류 상태를 나타내는 열거 형 값을 반환한다는 것입니다. 그러나 그 변경을 한 사람은이 특정 코드 줄을 검사하는 것을 놓쳤으며 컴파일러는 경고 나 오류없이 컴파일했기 때문에 도움이되지 않았습니다.
- 실제 유형이 무엇인지 모를 수도 있습니다. 이것은 종종 자동차의 주요 "혜택"으로 표시됩니다. "누가 신경 쓰는가? 컴파일"이라고 말할 수있을 때 함수가 무엇을 제공하는지 배우십시오.
아마 일종의 작품 일 것입니다. 루프 반복마다 500 바이트 구조체를 복사하더라도 단일 값을 검사 할 수 있기 때문에 코드는 여전히 완벽하게 작동하기 때문에 일종의 작업이 필요합니다. 따라서 단위 테스트조차도 잘못된 코드가 단순하고 순진한 자동차 뒤에 숨어 있음을 깨닫는 데 도움이되지 않습니다. 대부분의 다른 사람들이 파일을 스캔하면 언뜻보기에도 파일을 알 수 없습니다.
유형이 무엇인지 모르는 경우 유형이 무엇인지에 대해 잘못된 가정을하는 변수 이름을 선택하면 실제로 1a에서와 동일한 결과를 얻을 수 있지만 처음부터 시작하는 것보다 오히려 악화 될 수 있습니다 사후 리 팩터.
- 코드를 처음 작성할 때 코드를 입력하는 것은 프로그래밍에 가장 많은 시간이 걸리지 않습니다. 예, auto는 처음에 일부 코드를 더 빨리 작성합니다. 면책 조항으로 100 WPM 이상을 입력하므로 다른 사람들만큼 귀찮게하지 않을 수도 있습니다. 그러나 하루 종일 새 코드를 작성하는 것만으로도 행복한 캠프가 될 것입니다. 프로그래밍에서 가장 시간이 많이 걸리는 부분은 코드에서 재현하기 어려운 엣지 케이스 버그를 진단하는 것인데, 종종 자동차의 과잉 사용이 발생할 수있는 미묘한 문제가 발생하는 경우가 많습니다 (참조 대 복사, 부호 vs. 부호 없음, float vs. int, bool vs. 포인터 등).
auto는 기본적으로 표준 라이브러리 템플릿 유형의 끔찍한 구문에 대한 해결 방법으로 소개 된 것 같습니다. 사람들이 이미 잘 알고있는 템플릿 구문을 고치려고하지 말고 기존 코드로 인해 거의 불가능할 수도 있습니다. 기본적으로 문제를 숨기는 키워드를 추가하십시오. 본질적으로 "핵심"이라고 부르는 것.
실제로 표준 라이브러리 컨테이너와 함께 auto를 사용하는 것에 동의하지 않습니다. 분명히 키워드가 만들어졌으며 표준 라이브러리의 기능이 근본적으로 목적 (또는 그 유형에 대한 유형)이 변경되지 않아서 자동차를 비교적 안전하게 사용할 수 있습니다. 그러나 나는 훨씬 더 휘발성이 있고 잠재적으로 더 근본적인 변화를 겪을 수있는 자신의 코드와 인터페이스와 함께 사용하는 것에 매우 신중할 것입니다.
언어의 기능을 향상시키는 또 다른 유용한 자동 응용 프로그램은 유형에 관계없이 매크로로 임시를 만드는 것입니다. 이것은 전에는 할 수 없었지만 지금 할 수 있습니다.
auto
함수는 이미 읽기가 어려울 때 (예 : 너무 긴 함수, 이름이 잘못된 변수 등) 일을 읽기가 더 어려워 질 수 있습니다. 적절한 이름의 변수가있는 짧은 함수의 경우 유형이 # 1이 쉽거나 # 2와 관련이 없다는 것을 알면됩니다.