Saya akan mencoba yang terbaik untuk membingkai pertanyaan ini dengan cara yang tidak menghasilkan perang bahasa atau daftar, karena saya pikir mungkin ada jawaban yang baik dan teknis untuk pertanyaan ini.
Bahasa yang berbeda mendukung tipe alias hingga derajat yang berbeda-beda. C # memungkinkan tipe alias untuk dideklarasikan pada awal setiap file kode, dan mereka hanya berlaku di seluruh file itu. Bahasa seperti ML / Haskell menggunakan alias tipe mungkin sebanyak mereka menggunakan definisi tipe. C / C ++ adalah semacam Wild West, dengan typedef
dan #define
sering digunakan secara bergantian untuk tipe alias.
Sisi buruk dari aliasing tipe tidak terlalu banyak menimbulkan perselisihan:
- Itu membuatnya mudah untuk mendefinisikan tipe komposit yang dijelaskan secara alami oleh bahasa, misalnya
type Coordinate = float * float
atautype String = [Char]
. - Nama yang panjang dapat dipersingkat:
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
. - Dalam bahasa seperti ML atau Haskell, di mana parameter fungsi sering tidak memiliki nama, ketik alias menyediakan kemiripan dokumentasi mandiri.
Kelemahannya sedikit lebih rapuh: alias bisa berkembang biak, membuatnya sulit untuk membaca dan memahami kode atau mempelajari platform. API Win32 adalah contoh yang baik, dengan DWORD = int
dan HINSTANCE = HANDLE = void*
dan itu LPHANDLE = HANDLE FAR*
dan itu. Dalam semua kasus ini, hampir tidak masuk akal untuk membedakan antara HANDLE dan void pointer atau DWORD dan integer dll.
Mengesampingkan perdebatan filosofis tentang apakah seorang raja harus memberikan kebebasan penuh kepada rakyatnya dan membiarkan mereka bertanggung jawab atas diri mereka sendiri atau apakah mereka harus memiliki semua tindakan dipertanyakan mereka diintervensi, mungkinkah ada media bahagia yang akan memungkinkan manfaat dari mengetik alias sementara mengurangi risiko penyalahgunaannya?
Sebagai contoh, masalah nama panjang dapat diselesaikan dengan fitur autocomplete yang baik. Visual Studio 2010 misalnya akan memungkinkan Anda untuk mengetik DSBA untuk merujuk Intellisense ke System.Diagnostics.DebuggerStepBoundaryAttribute. Mungkinkah ada fitur lain yang akan memberikan manfaat lain dari mengetik alias lebih aman?
DebuggerStepBoundaryAttribute
jauh lebih mudah dibaca daripada DSBA
. Dalam kasus pertama, Anda tahu apa artinya. Yang kedua, Anda tidak tahu. Sekarang bayangkan Anda menggunakan dua puluh alias berbeda seperti ini dalam kode. Adakah yang punya cukup keberanian untuk mencoba membaca dan memahami kode Anda?