Tôi sẽ cố gắng hết sức để đóng khung câu hỏi này theo cách không dẫn đến một cuộc chiến ngôn ngữ hoặc danh sách, bởi vì tôi nghĩ có thể có một câu trả lời hay, kỹ thuật cho câu hỏi này.
Các ngôn ngữ khác nhau hỗ trợ bí danh loại ở mức độ khác nhau. C # cho phép khai báo các bí danh ở đầu mỗi tệp mã và chúng chỉ hợp lệ trong toàn bộ tệp đó. Các ngôn ngữ như ML / Haskell sử dụng bí danh loại có thể nhiều như họ sử dụng định nghĩa loại. C / C ++ là một loại của miền Tây hoang dã, typedef
và #define
thường được sử dụng dường như có thể hoán đổi cho các loại bí danh.
Mặt trái của kiểu răng cưa không gây ra tranh chấp quá nhiều:
- Nó giúp thuận tiện để xác định các loại hỗn hợp được mô tả tự nhiên bằng ngôn ngữ, ví dụ
type Coordinate = float * float
hoặctype String = [Char]
. - Tên dài có thể được rút ngắn :
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
. - Trong các ngôn ngữ như ML hoặc Haskell, trong đó các tham số chức năng thường không có tên, các bí danh loại cung cấp một ngữ nghĩa của tài liệu tự.
Nhược điểm là iffy hơn một chút: bí danh có thể sinh sôi nảy nở, gây khó khăn cho việc đọc và hiểu mã hoặc tìm hiểu một nền tảng. API Win32 là một ví dụ tốt, với nó DWORD = int
và của nó HINSTANCE = HANDLE = void*
và của nó LPHANDLE = HANDLE FAR*
và như vậy. Trong tất cả các trường hợp này, hầu như không có ý nghĩa gì để phân biệt giữa một TAY và một con trỏ trống hoặc DWORD và một số nguyên, v.v.
Tạm gác lại cuộc tranh luận triết học về việc một vị vua có nên trao tự do hoàn toàn cho các đối tượng của họ và để họ tự chịu trách nhiệm hay liệu họ có nên can thiệp tất cả các hành động đáng ngờ của mình hay không, có thể có một phương tiện hạnh phúc cho phép lợi ích của loại răng cưa trong khi giảm thiểu nguy cơ lạm dụng của nó?
Ví dụ, vấn đề về tên dài có thể được giải quyết bằng các tính năng tự động hoàn thành tốt. Chẳng hạn, Visual Studio 2010 sẽ cho phép bạn nhập DSBA để giới thiệu Intellisense cho System.Diagnostics.DebuggerStepBoundaryAttribution. Có thể có các tính năng khác sẽ cung cấp các lợi ích khác của việc khử răng cưa an toàn hơn không?
DebuggerStepBoundaryAttribute
là nhiều hơn dễ đọc hơn DSBA
. Trong trường hợp đầu tiên, bạn biết nó có nghĩa gì. Trong cái thứ hai, bạn không có ý tưởng. Bây giờ hãy tưởng tượng bạn sử dụng hai mươi bí danh khác nhau như thế này trong mã. Bất cứ ai cũng có đủ can đảm để cố gắng đọc và hiểu mã của bạn?