나는이 질문에 대한 좋은 기술적 답변이있을 수 있다고 생각하기 때문에 언어 전쟁이나 목록을 만들지 않는 방식으로이 질문을 구성하기 위해 최선을 다할 것입니다.
다른 언어는 다양한 정도의 유형 별칭을 지원합니다. C #을 사용하면 각 코드 파일의 시작 부분에 형식 별칭을 선언 할 수 있으며 해당 파일 전체에서만 유효합니다. ML / Haskell과 같은 언어는 형식 정의를 사용하는 것만 큼 형식 별칭을 사용합니다. C / C ++는 함께 일종의 와일드 웨스트의입니다 typedef및 #define자주 별칭 유형에 보이는 의미로 사용된다.
앨리어싱 유형의 단점은 너무 많은 논쟁을 불러 일으키지 않습니다.
- 언어에 의해 자연스럽게 설명되는 복합 유형 (예 :
type Coordinate = float * float또는) 을 정의하는 것이 편리합니다type String = [Char]. - 긴 이름을 줄일 수 있습니다 :
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute. - 함수 매개 변수에 종종 이름이없는 ML 또는 Haskell과 같은 언어에서 유형 별칭은 자체 문서와 유사합니다.
단점은 좀 더 정교합니다. 별칭이 확산되어 코드를 읽고 이해하거나 플랫폼을 배우기가 어렵습니다. Win32 API는 그것 DWORD = int과 그것 HINSTANCE = HANDLE = void*그리고 그 LPHANDLE = HANDLE FAR*와 같은 좋은 예 입니다. 이 모든 경우에 HANDLE과 void 포인터 또는 DWORD와 정수 등을 구별하는 것은 의미가 없습니다.
왕이 그들의 주제에 완전한 자유를 주어야하고 그들 스스로 책임을 지도록해야하는지 또는 의심스러운 행동이 모두 개입되어야하는지에 대한 철학적 논쟁을 제쳐두고, 타입 앨리어싱의 이점을 허용하는 행복한 매체가있을 수 있을까 학대의 위험을 완화?
예를 들어, 긴 이름 문제는 자동 완성 기능으로 해결할 수 있습니다. 예를 들어 Visual Studio 2010에서는 Intellisense를 System.Diagnostics.DebuggerStepBoundaryAttribute를 참조하기 위해 DSBA를 입력 할 수 있습니다. 유형 앨리어싱의 다른 이점을보다 안전하게 제공하는 다른 기능이있을 수 있습니까?
DebuggerStepBoundaryAttribute많이 더 이상 읽을 DSBA. 첫 번째 경우, 그것이 무엇을 의미하는지 알고 있습니다. 두 번째는 전혀 모른다. 이제 코드에서 이와 같은 20 개의 별명을 사용한다고 가정하십시오. 누구나 코드를 읽고 이해하려고 충분한 용기가 있습니까?