我将尽最大努力以不会导致语言冲突或语言清单的方式来构架此问题,因为我认为对此问题可能会有很好的技术答案。
不同的语言在不同程度上支持类型别名。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将允许您键入DSBA,以便将Intellisense引用到System.Diagnostics.DebuggerStepBoundaryAttribute。还有其他功能可以更安全地提供类型别名的其他好处吗?
DebuggerStepBoundaryAttribute比更具可读性DSBA。在第一种情况下,您知道这意味着什么。在第二篇中,您不知道。现在,假设您在代码中使用了二十个这样的别名。会有人有足够的勇气尝试阅读和理解您的代码吗?