Dalam sistem yang diketik secara dinamis, nilai memiliki tipe saat runtime tetapi variabel dan fungsi tidak. Dalam sistem yang diketik secara statis, variabel dan fungsi memiliki tipe yang diketahui dan diperiksa pada waktu kompilasi. Misalnya dengan Python xdapat berupa apa saja ; saat runtime, jika itu 1angka dan jika ya "foo", itu adalah string. Anda hanya akan tahu tipe mana xpada saat runtime, dan bisa berbeda setiap kali Anda menjalankan program. Dalam bahasa seperti Java, Anda akan menulis int xjika xingin menjadi angka, dan Anda akan tahu pada waktu kompilasi bahwa xselalu harus menjadi int.
Tipe "Eksplisit" dan "implisit" keduanya merujuk pada sistem tipe statis . Karakteristik yang menentukan dari sistem statis adalah bahwa jenisnya diketahui pada waktu kompilasi, tetapi tidak harus bahwa mereka harus dituliskan. Di Jawa, jenisnya eksplisit - Anda harus menuliskannya. Jadi di Jawa, metode mungkin terlihat seperti:
public int foo(String bar, Object baz) { ... }
Tipe-tipe tersebut diketahui pada waktu kompilasi (statis) dan dituliskan (eksplisit). Namun, ada juga bahasa yang tidak memaksa Anda untuk menulis ketik. Mereka dapat menyimpulkan jenis fungsi dari tubuhnya dan bagaimana fungsinya. Contohnya adalah OCaml, tempat Anda dapat menulis sesuatu seperti:
let foo x = x + 1
Karena Anda menggunakan +, OCaml dapat mengetahui bahwa xitu harus intsemuanya sendiri. Jadi jenis foo( foo : int -> int) adalah diketahui pada waktu kompilasi, seperti contoh Java. Itu sepenuhnya statis. Namun, karena kompilator dapat mengetahui tipe apa yang harus dilakukan sendiri, Anda tidak harus menuliskannya sendiri: mereka tersirat.
Singkatnya: apakah sistem tipe eksplisit atau implisit adalah properti sistem statis . Ini adalah pertanyaan yang sama sekali berbeda dari apakah sistem tipe itu dinamis atau statis.
Seringkali, Anda memiliki sistem tipe yang terkadang eksplisit dan terkadang implisit.
Misalnya, saya yakin C # memungkinkan Anda menyimpulkan jenis menggunakan varkata kunci. Jadi alih-alih menulis int x = 10, Anda dapat menulis var x = 10dan angka-angka kompiler yang xharus menjadi int. C ++ melakukan sesuatu yang mirip dengan auto. Sistem ini biasanya eksplisit tetapi memiliki beberapa kesimpulan.
Di sisi lain, ada sistem yang biasanya implisit tetapi kadang-kadang memaksa Anda untuk menulis tanda tangan jenis. Haskell adalah contoh yang bagus. Sebagian besar waktu, Haskell dapat menyimpulkan jenis untuk Anda. Namun, kadang-kadang Anda dapat menulis kode yang ambigu show . read, di mana Haskell tidak dapat mengetahui jenisnya sendiri. Dalam hal ini, Anda akan dipaksa untuk secara eksplisit menentukan jenis salah satu showatau read. Selain itu, beberapa fitur yang lebih canggih dari sistem tipe (seperti peringkat-n polimorfisme) membuat inferensi tidak dapat diputuskan - yaitu, tidak dijamin akan terhenti. Ini berarti bahwa kode yang menggunakan fitur ini sering membutuhkan tanda tangan jenis eksplisit.