Jenis tidak disetel.
Anda lihat, teori himpunan memiliki sejumlah fitur yang tidak berlaku untuk jenis, dan sebaliknya . Sebagai contoh, suatu objek memiliki tipe kanonik tunggal. Ini mungkin merupakan instance dari beberapa tipe yang berbeda, tetapi hanya salah satu dari tipe tersebut yang digunakan untuk instantiate. Teori himpunan tidak memiliki gagasan tentang perangkat "kanonik".
Teori himpunan memungkinkan Anda membuat himpunan bagian dengan cepat , jika Anda memiliki aturan yang menjelaskan apa yang menjadi bagian dari himpunan bagian. Teori tipe umumnya tidak mengizinkan ini. Sementara sebagian besar bahasa memiliki Number
jenis atau sesuatu yang serupa, mereka tidak memiliki EvenNumber
jenis, juga tidak mudah untuk membuatnya. Maksud saya, cukup mudah untuk mendefinisikan tipe itu sendiri, tetapi setiap Number
s yang ada bahkan tidak akan secara ajaib diubah menjadi EvenNumber
s.
Sebenarnya, mengatakan bahwa Anda dapat "membuat" himpunan bagian agak tidak jujur, karena himpunan adalah jenis hewan yang berbeda sama sekali. Dalam teori himpunan, himpunan bagian itu sudah ada , dalam semua cara tak terbatas Anda dapat mendefinisikannya. Dalam teori tipe, kita biasanya berharap berhadapan dengan sejumlah tipe yang terbatas (jika besar) pada waktu tertentu. Satu-satunya tipe yang dikatakan ada adalah yang sudah kita tentukan, tidak setiap jenis yang bisa kita definisikan.
Perangkat tidak diizinkan untuk memuat diri mereka secara langsung atau tidak langsung . Beberapa bahasa, seperti Python, menyediakan tipe-tipe dengan struktur yang kurang teratur (dalam Python, type
tipe kanoniknya adalah type
, dan object
dianggap sebagai turunan dari object
). Di sisi lain, sebagian besar bahasa tidak mengizinkan tipe yang ditentukan pengguna untuk terlibat dalam tipu daya semacam ini.
Set biasanya diizinkan untuk tumpang tindih tanpa terkandung satu sama lain. Ini tidak biasa dalam teori tipe, meskipun beberapa bahasa mendukungnya dalam bentuk pewarisan berganda. Bahasa lain, seperti Java, hanya mengizinkan bentuk terbatas ini atau melarangnya sama sekali.
Tipe kosong ada (ini disebut tipe bawah ), tetapi sebagian besar bahasa tidak mendukungnya, atau tidak menganggapnya sebagai tipe kelas satu. "Tipe yang berisi semua tipe lain" juga ada (ini disebut tipe teratas ) dan didukung secara luas, tidak seperti teori himpunan.
NB : Seperti yang ditunjukkan beberapa komentator sebelumnya (sebelum utas dipindahkan ke obrolan), dimungkinkan untuk memodelkan tipe dengan teori himpunan dan konstruksi matematika standar lainnya. Misalnya, Anda bisa memodelkan tipe keanggotaan sebagai relasi daripada memodelkan tipe sebagai set. Namun dalam praktiknya, ini jauh lebih sederhana jika Anda menggunakan teori kategori daripada teori himpunan. Ini adalah contoh bagaimana Haskell memodelkan teori tipenya.
Gagasan "subtyping" benar-benar sangat berbeda dari gagasan "subset." Jika X
ini adalah subtipe dari Y
, itu berarti kita dapat mengganti instance Y
untuk instance X
dan program akan tetap "berfungsi" dalam beberapa hal. Ini lebih bersifat perilaku daripada struktural, meskipun beberapa bahasa (misalnya Go, Rust, bisa dibilang C) telah memilih yang terakhir karena alasan kenyamanan, baik untuk programmer atau implementasi bahasa.
a
danb
anggota dari jenis itu, seperti yang disebutkan Killian Forth. Myclass isomorfis untuk catatan dengan bidanga
danb
jenisint
dandouble
- Anda dapat mengambil catatan seperti itu dan mengubahnya menjadi turunan darimyclass