ในระบบที่พิมพ์แบบไดนามิกค่ามีชนิดที่รันไทม์ แต่ตัวแปรและฟังก์ชั่นไม่ได้ ในระบบที่พิมพ์แบบสแตติกตัวแปรและฟังก์ชั่นจะมีชนิดที่รู้จักและตรวจสอบ ณ เวลารวบรวม เช่นในหลามxสามารถเป็นอะไร ; ที่ runtime ถ้ามันเป็น1จำนวนและถ้ามันเป็น"foo"สตริง คุณจะรู้ว่าประเภทใดxที่ runtime และมันอาจแตกต่างกันในแต่ละครั้งที่คุณรันโปรแกรม ในภาษาเช่น Java, คุณจะเขียนint xถ้าxจะเป็นตัวเลขและคุณจะได้รู้ว่าที่รวบรวมเวลาที่มักจะต้องมีxint
"Explicit" และ "implicit" ทั้งคู่อ้างถึงระบบชนิดสแตติก ลักษณะการกำหนดของระบบสแตติกคือชนิดที่ทราบในเวลารวบรวม แต่ไม่จำเป็นต้องเขียนออกมา ใน Java ประเภทจะชัดเจน - คุณต้องเขียนมันออกมา ดังนั้นใน Java เมธอดอาจมีลักษณะดังนี้:
public int foo(String bar, Object baz) { ... }
ชนิดเป็นที่รู้จักกันในเวลารวบรวม (คงที่) และเขียนออกมา (ชัดเจน) อย่างไรก็ตามยังมีภาษาที่ไม่บังคับให้คุณเขียนรูปแบบ พวกเขาสามารถอนุมานประเภทของฟังก์ชั่นจากร่างกายของมันและวิธีการใช้งาน ตัวอย่างจะเป็น OCaml ซึ่งคุณสามารถเขียนสิ่งที่ชอบ:
let foo x = x + 1
ตั้งแต่คุณใช้+OCaml สามารถคิดxได้ว่าจะต้องเป็นintของตัวเองทั้งหมด ดังนั้นชนิดของfoo( foo : int -> int) จึงเป็นที่รู้จักกันในเวลารวบรวมเช่นเดียวกับตัวอย่างของ Java มันคงที่ทั้งหมด อย่างไรก็ตามเนื่องจากคอมไพเลอร์สามารถระบุประเภทที่ต้องเป็นของตัวเองคุณไม่จำเป็นต้องเขียนมันออกมาด้วยตัวเอง: โดยปริยาย
กล่าวโดยย่อ: ระบบประเภทไม่ชัดเจนหรือโดยนัยคือคุณสมบัติของระบบคงที่ มันเป็นคำถามที่แตกต่างอย่างสิ้นเชิงจากระบบประเภทที่เป็นแบบไดนามิกหรือแบบคงที่
บ่อยครั้งที่คุณมีระบบการพิมพ์ที่ชัดเจนและบางครั้งก็บอกเป็นนัย
ตัวอย่างเช่นฉันเชื่อว่า C # ช่วยให้คุณสามารถระบุประเภทโดยใช้varคำหลัก ดังนั้นแทนที่จะเขียนint x = 10คุณสามารถเขียนvar x = 10และเรียบเรียงตัวเลขออกมาว่าจะเป็นมีx intc ++ autoทำอะไรบางอย่างที่คล้ายกันด้วย ระบบเหล่านี้มักจะชัดเจน แต่มีการอนุมาน
บน flipside มีระบบที่มักจะบอกเป็นนัย แต่บางครั้งบังคับให้คุณเขียนลายเซ็นประเภท Haskell เป็นตัวอย่างที่ดี ส่วนใหญ่เวลา Haskell สามารถอนุมานประเภทสำหรับคุณ อย่างไรก็ตามบางครั้งคุณสามารถเขียนโค้ดที่ไม่ชัดเจนเช่นshow . readHaskell ซึ่งไม่สามารถระบุประเภทด้วยตนเองได้ ในกรณีนี้คุณจะถูกบังคับให้ชัดเจนระบุชนิดของทั้งสองหรือshow readนอกจากนี้คุณสมบัติขั้นสูงบางอย่างของระบบประเภท (เช่น polymorphism อันดับ -n) ทำให้การอนุมานไม่สามารถตัดสินใจได้ - นั่นคือมันไม่รับประกันว่าจะหยุด ซึ่งหมายความว่ารหัสที่ใช้คุณสมบัตินี้มักจะต้องการลายเซ็นประเภทที่ชัดเจน