Я постараюсь сделать все возможное, чтобы сформулировать этот вопрос так, чтобы это не привело к языковой войне или списку, потому что я думаю, что на этот вопрос может быть хороший технический ответ.
Различные языки поддерживают псевдонимы типов в различной степени. 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. В первом случае вы знаете, что это значит. Во втором вы понятия не имеете. Теперь представьте, что вы используете в коде двадцать различных псевдонимов. Хватит ли у кого-нибудь смелости попытаться прочитать и понять ваш код?