คำถามนี้เกี่ยวกับความหมาย
ถ้าฉันให้ข้อมูลนี้กับคุณ: 12
มันคือประเภทอะไร? คุณไม่มีทางรู้แน่ ๆ อาจเป็นจำนวนเต็ม - อาจเป็นแบบลอยตัว - อาจเป็นสตริง ในแง่นั้นมันเป็นข้อมูลที่ "ไม่ได้พิมพ์" อย่างมาก
ถ้าฉันให้ภาษาจินตภาพแก่คุณซึ่งให้คุณใช้โอเปอเรเตอร์เช่น "เพิ่ม", "ลบ" และ "ต่อ" กับข้อมูลนี้และข้อมูลอื่นโดยพลการบางอย่าง "ประเภท" ค่อนข้างไม่เกี่ยวข้อง (กับภาษาจินตภาพของฉัน) (ตัวอย่าง : อาจadd(12, a)
ให้ผลบวก109
ซึ่งเป็น12
ค่า ascii ของa
)
มาคุย C กันสักครู่ C ช่วยให้คุณทำสิ่งที่คุณต้องการด้วยข้อมูลส่วนใดก็ได้ หากคุณกำลังใช้ฟังก์ชั่นที่ใช้เวลาสองuint
s - คุณสามารถโยนและผ่านสิ่งที่คุณต้องการ - และค่าก็จะถูกตีความว่าเป็นuint
s ในแง่นี้ C คือ "untyped" (หากคุณปฏิบัติต่อมันในลักษณะดังกล่าว)
อย่างไรก็ตาม - และไปถึงจุดที่เบรนแดน - ถ้าฉันบอกคุณว่า "อายุของฉันคือ12
" - แล้วก็12
มีประเภท - อย่างน้อยเราก็รู้ว่ามันเป็นตัวเลข ด้วยบริบททุกอย่างมีประเภท - โดยไม่คำนึงถึงภาษา
นี่คือเหตุผลที่ฉันพูดตอนเริ่มต้น - คำถามของคุณเป็นหนึ่งในความหมาย ความหมายของ "untyped" คืออะไร? ฉันคิดว่าเบรนแดนกระทบเล็บที่หัวเมื่อเขาพูดว่า "ไม่มีรูปแบบคงที่" - เพราะนั่นคือทั้งหมดที่อาจหมายถึง มนุษย์จำแนกสิ่งต่าง ๆ ตามประเภท เรารู้โดยสัญชาตญาณว่ามีบางสิ่งบางอย่างที่แตกต่างกันโดยพื้นฐานระหว่างรถยนต์กับลิง - โดยไม่ได้รับการสอนให้สร้างความแตกต่างเหล่านั้น
กลับไปที่ตัวอย่างของฉันในตอนแรก - ภาษาที่ "ไม่สนใจประเภท" (ต่อ se) อาจให้คุณ "เพิ่ม" อายุ "และ" ชื่อ "โดยไม่มีข้อผิดพลาดทางไวยากรณ์ ... แต่ ไม่ได้หมายความว่าเป็นการทำงานที่มีเหตุผล
Javascript อาจอนุญาตให้คุณทำสิ่งที่บ้าทุกประเภทโดยไม่คำนึงถึง "ข้อผิดพลาด" ไม่ได้หมายความว่าสิ่งที่คุณกำลังทำนั้นฟังดูมีเหตุผล ขอบคุณสำหรับนักพัฒนาในการทำงาน
เป็นระบบ / ภาษาที่ไม่บังคับใช้ความปลอดภัยของประเภทในเวลารวบรวม / สร้าง / ตีความ "untyped" หรือ "พิมพ์แบบไดนามิก"?
อรรถศาสตร์
แก้ไข
ฉันต้องการเพิ่มบางสิ่งบางอย่างที่นี่เพราะบางคนดูเหมือนจะติดกับ "ใช่ แต่ Javascript มี" ประเภท "บางส่วน
ในความคิดเห็นของฉันเกี่ยวกับคำตอบของคนอื่นฉันพูดว่า:
ใน Javascript ฉันสามารถมีวัตถุที่ฉันสร้างขึ้นเพื่อเป็น "Monkeys" และวัตถุที่ฉันสร้างขึ้นเพื่อเป็น "มนุษย์" และฟังก์ชั่นบางอย่างอาจได้รับการออกแบบมาเพื่อทำงานกับ "มนุษย์" เท่านั้นส่วนอื่น ๆ ใน "Monkeys" เท่านั้นและ แต่คนอื่น ๆ เพียง "สิ่งที่มีอาวุธ" ไม่ว่าภาษาจะมีการบอกหรือไม่ก็ตามมีหมวดหมู่ของวัตถุว่า "สิ่งที่มีอาวุธ" นั้นไม่เกี่ยวข้องกับการประกอบ ("ไม่พิมพ์") เหมือนกับ Javascript ("ไดนามิก") มันเป็นเรื่องของความซื่อสัตย์ตรรกะ - และข้อผิดพลาดเพียงอย่างเดียวจะใช้สิ่งที่ไม่มีอาวุธด้วยวิธีการนั้น
ดังนั้นหากคุณคิดว่า Javascript มี "ความคิดประเภท" ภายใน - และด้วยเหตุนี้ "ไดนามิกประเภท" - และคิดว่านี่เป็น "แตกต่างอย่างชัดเจนจากระบบที่ไม่มีการพิมพ์" - คุณควรเห็นจากตัวอย่างด้านบนว่า ประเภท "มันมีภายในไม่เกี่ยวข้องจริงๆ
เพื่อทำการดำเนินการเดียวกันกับ C # เช่นฉันต้องการอินเทอร์เฟซที่เรียกว่าICreatureWithArms
หรือสิ่งที่คล้ายกัน ไม่เช่นนั้นใน Javascript - ไม่ใช่ใน C หรือ ASM
เห็นได้ชัดว่า Javascript มีความเข้าใจเกี่ยวกับ "ประเภท" ใด ๆ หรือไม่นั้นไม่เกี่ยวข้องเลย