Bu soruyu bir dil savaşı veya listeye yol açmayacak şekilde çerçevelemek için elimden geleni yapacağım, çünkü bu sorunun iyi ve teknik bir cevabı olabileceğini düşünüyorum.
Farklı diller, tür takma adlarını değişen derecelerde destekler. C #, tür takma adlarının her kod dosyasının başında bildirilmesine izin verir ve yalnızca bu dosya boyunca geçerlidir. ML / Haskell gibi diller muhtemelen tür tanımlarını kullandıkları kadar tür takma adları kullanır. C / C ++, bir tür Vahşi Batı'dır typedef
ve #define
genellikle takma ad türleriyle birbirinin yerine kullanılabilir gibi görünür.
Tür örtüşmesinin üst tarafları çok fazla anlaşmazlığa neden olmaz:
- Dille doğal olarak tanımlanan bileşik türlerin tanımlanmasını kolaylaştırır, örn . ,
type Coordinate = float * float
Veyatype String = [Char]
. - Uzun isimler kısaltılabilir:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
. - İşlev parametrelerinin genellikle adlarının bulunmadığı ML veya Haskell gibi dillerde, tür takma adları kendi kendini belgeleme bir görünüm sağlar.
Dezavantajı biraz daha havalı: takma adlar çoğalabilir, bu da kodu okumayı ve anlamayı veya bir platformu öğrenmeyi zorlaştırabilir. Win32 API, onun DWORD = int
ve onun HINSTANCE = HANDLE = void*
ve onun LPHANDLE = HANDLE FAR*
gibi iyi bir örnektir . Tüm bu durumlarda, bir HANDLE ile bir geçersiz işaretçi veya bir DWORD ile bir tam sayı vb. Arasında ayrım yapmak pek mantıklı değildir.
Bir kralın konularına tam özgürlük verip vermemeleri ve kendilerinden sorumlu olmalarına izin verip vermemeleri ya da tüm şüpheli eylemlerine müdahale edip etmemeleri konusunda felsefi tartışmayı bir kenara bırakarak, tür yumuşatmanın faydalarına izin verecek mutlu bir ortam olabilir mi? kötüye kullanım riskini hafifletiyor mu?
Örnek olarak, uzun isimler sorunu iyi otomatik tamamlama özellikleri ile çözülebilir. Visual Studio 2010, Intellisense System.Diagnostics.DebuggerStepBoundaryAttribute başvurmak için DSBA yazmanıza izin verir. Tür örtüşmesinin diğer faydalarını daha güvenli bir şekilde sağlayacak başka özellikler olabilir mi?
DebuggerStepBoundaryAttribute
çok daha okunabilir DSBA
. İlk durumda, bunun ne anlama geldiğini biliyorsunuz. İkincisinde, hiçbir fikrin yok. Şimdi kodda bunun gibi yirmi farklı takma ad kullandığınızı düşünün. Kodunuzu okumak ve anlamak için yeterli cesaretiniz var mı?