Saya membaca tentang Tipe Data Aljabar (terima kasih kepada Richard Minerich, saya menemukan penjelasan konsep yang sangat bagus). Meskipun saya pikir saya memahami gagasan tentang jenis penjumlahan dan jenis produk, dll., Yang saya tidak terlalu pahami adalah bagaimana Tipe Data Aljabar berguna di luar menentukan pencocokan pola. Apa hal lain yang bisa dilakukan seseorang dengan pencocokan pola ADT?
EDIT: Saya tidak bertanya apa yang bisa dilakukan pengembang dengan ADT yang tidak bisa dilakukan dengan objek. Saya bertanya apakah ada operasi lain yang diizinkan ADT; misalnya, dapatkah seseorang melakukan penalaran tambahan tentang jenis-jenis yang terlibat jika ADT digunakan? Apakah ADT memfasilitasi semacam analisis tipe yang tidak akan mungkin tanpa mereka?
sumber
Jawaban:
Tipe Data Aljabar berbeda karena dapat dibangun dari beberapa jenis "hal". Sebagai contoh, sebuah Pohon dapat mengandung apa pun (Kosong), Leaf, atau Node.
Karena Node terdiri dari dua Pohon, tipe data aljabar dapat bersifat rekursif.
Pencocokan pola memungkinkan tipe data aljabar didekonstruksi dengan cara yang menjaga keamanan tipe. Pertimbangkan implementasi kedalaman berikut ini dan yang setara dengan kodesemu:
dibandingkan dengan:
Ini memiliki kelemahan yang harus diingat oleh programmer untuk menggunakan Empty before Leaf sehingga field1 tidak diakses pada pohon Empty. Demikian juga, kasus Leaf harus dideklarasikan sebelum kasus Node sehingga field2 tidak diakses di Leaf. Dengan demikian jenis keamanan tidak dipertahankan oleh bahasa tetapi lebih memaksakan beban kognitif tambahan pada programmer. Ngomong-ngomong, saya mengambil contoh-contoh ini langsung dari halaman wikipedia.
Tentu saja, langauge yang mengetik bebek bisa melakukan sesuatu seperti ini:
Jadi tipe data aljabar mungkin tidak benar-benar lebih baik daripada yang setara dengan OOP mereka, tetapi mereka memberikan serangkaian ketegangan yang berbeda untuk bekerja dengan ketika membangun perangkat lunak.
sumber
Saya tidak begitu yakin penjelasan adalah semua yang sangat baik.
Tipe Data aljabar digunakan untuk membuat struktur data, seperti daftar dan pohon.
Misalnya pohon parse mudah diwakili dengan struktur data aljabar.
Sebenarnya tidak perlu jauh lebih banyak untuk mewakili bahasa C.
Tapi sungguh, Anda dapat melakukan SEMUANYA dengan tipe data aljabar. Lisp membuktikan, Anda dapat melakukan segalanya dengan berpasangan dan ADT cukup memberikan cara yang lebih terperinci dan aman untuk pendekatan ini.
Tentu saja, jika Anda bertanya, "Apa yang dapat Anda lakukan dengan ADT, yang tidak dapat Anda lakukan dengan objek?", Jawabannya adalah "tidak ada". Hanya kadang-kadang (sebagian besar) Anda akan menemukan solusi pada ADT secara signifikan lebih sedikit bertele-tele, sedangkan yang berdasarkan objek bisa dibilang lebih fleksibel. Jadi untuk meletakkannya di pohon parse yang diwakili dengan ADT:
sumber