สิ่งนี้เกิดขึ้นในการพูดคุยกับเพื่อนและฉันพบว่าตัวเองถูกกดขี่เพื่อคิดข้อโต้แย้งที่ดี การพิมพ์ที่ได้รับประโยชน์มีประโยชน์อะไรบ้าง
สิ่งนี้เกิดขึ้นในการพูดคุยกับเพื่อนและฉันพบว่าตัวเองถูกกดขี่เพื่อคิดข้อโต้แย้งที่ดี การพิมพ์ที่ได้รับประโยชน์มีประโยชน์อะไรบ้าง
คำตอบ:
ปัญหาของการสนทนาประเภทนี้ก็คือคำว่า "การพิมพ์ที่ไม่รัดกุม" และ "การพิมพ์ที่รัดกุม" นั้นไม่ได้กำหนดซึ่งแตกต่างจากตัวอย่างเช่นคำว่า "การพิมพ์แบบคงที่", "การพิมพ์แบบไดนามิก", "การพิมพ์แบบชัดแจ้ง", "การพิมพ์แบบชัดแจ้ง" การพิมพ์เป็ด "," การพิมพ์เชิงโครงสร้าง "หรือ" การพิมพ์เล็กน้อย " Heck แม้คำว่า "การพิมพ์อย่างชัดแจ้ง" และ "การพิมพ์แบบแฝง" ซึ่งยังคงเป็นพื้นที่เปิดของการวิจัยและการอภิปรายอาจมีการกำหนดไว้ดีกว่า
ดังนั้นจนกว่าเพื่อนของคุณจะให้คำจำกัดความของคำว่า "การพิมพ์ที่ไม่รัดกุม" ซึ่งมีความเสถียรเพียงพอที่จะใช้เป็นพื้นฐานของการสนทนามันไม่สมเหตุสมผลที่จะตอบคำถามนี้
น่าเสียดายที่นอกเหนือจากคำตอบของ Nickไม่มีผู้ตอบที่ใส่ใจที่จะให้คำจำกัดความของพวกเขาเช่นกันและคุณสามารถเห็นความสับสนที่เกิดขึ้นในความคิดเห็นบางส่วน เป็นการยากที่จะบอกว่าเนื่องจากไม่มีใครให้คำจำกัดความของพวกเขาจริง ๆ แต่ฉันคิดว่าฉันนับอย่างน้อยสามคนต่างกันแค่ในหน้านี้
คำจำกัดความที่ใช้บ่อยบางคำคือ (และใช่ฉันรู้ว่าไม่มีคำอธิบายใด ๆ ที่สมเหตุสมผล แต่เป็นคำจำกัดความที่ฉันเคยเห็นคนใช้จริง):
อย่างไรก็ตามคำจำกัดความทั้งสามที่ดูเหมือนจะใช้กันอย่างแพร่หลายที่สุดคือ
ยกเว้นในกรณีที่ทุกคนเห็นด้วยในความหมายของสิ่งที่ "พิมพ์อ่อนแอ" แม้เป็นก็ไม่ได้ทำให้ความรู้สึกที่จะคิดเกี่ยวกับสิ่งที่ข้อดีของมันอาจจะ ข้อดีของอะไร แม้เลวถ้ามีไม่มีความหมายที่ทุกคนแล้วทุกคนก็สามารถเปลี่ยนคำจำกัดความของพวกเขาเพื่อให้พอดีกับข้อโต้แย้งของพวกเขาและทุกการสนทนามีการประกันสวยมากตกมาอยู่กับสงครามเหล่า
ตัวฉันเองได้เปลี่ยนคำจำกัดความของตัวเองหลาย ๆ ครั้งในช่วงหลายปีที่ผ่านมาและตอนนี้ก็มาถึงจุดที่ฉันไม่ได้พิจารณาถึงข้อกำหนดที่เป็นประโยชน์อีกต่อไปแล้ว ฉันเคยคิดด้วยว่าการพิมพ์ที่อ่อนแอ (ในคำจำกัดความต่าง ๆ ของมัน) มีที่ในเชลล์สคริปต์ แต่เมื่อใดก็ตามที่ฉันต้องแก้ปัญหาเดียวกันใน Bash และ PowerShell ฉันจะเตือนฉันอย่างเจ็บปวดว่าผิดอย่างไร
โปรดจำไว้ว่ามีแนวคิดหลักสองข้อที่มักสับสน:
ภาษาการเขียนโปรแกรมกล่าวกันว่าพิมพ์แบบไดนามิกเมื่อการตรวจสอบชนิดส่วนใหญ่ดำเนินการในเวลาทำงานซึ่งต่างจากการรวบรวมเวลา ในการพิมพ์แบบไดนามิกค่ามีประเภท แต่ตัวแปรไม่ นั่นคือตัวแปรสามารถอ้างถึงค่าใด ๆ
ข้อดีที่นี่มักจะถูกไล่ออกเหมือนกับโปรแกรมเมอร์ "ใหม่" แต่ก็สามารถอำนวยความสะดวกให้กับโปรแกรมเมอร์ได้:
if (!(arr is Array)) arr = [arr]; // is, instanceof, .constructor ==, whatever
โค้ดน้อยลงในกรณีใด ๆ ที่คุณต้องโยนหรือกำหนดค่าใหม่:
if (data is Array)) {
i = data.length; // no i = ((Array)data).length or Array myArr=(Array)data;
}
การพิมพ์ที่อ่อนแอหมายถึงภาษาที่แปลงประเภท (หรือปลดเปลื้อง) โดยนัยเมื่อใช้
ประโยชน์ที่ได้รับ:
การประเมินผลแบบบูลโดยปริยาย สามารถประเมินชนิดใดก็ได้เป็นบูลีน นอกจากนี้ยังมีผลประโยชน์ด้านเช่นส่วนหนึ่งของ||
สามารถใช้ในการกำหนดโดยไม่ต้องแปลงเป็นบูลีน:
var a = param || defaultValue;
อีกครั้งรหัสน้อย:
var num = 5;
var str = "Hello";
input.innerHTML = input.value = num;
for (var i=0; i < input.value; i++) { ... }
แม้กระทั่งจาวาก็ต้องไปครึ่งทางด้วยการเรียกโดยปริยาย.toString()
เมื่อรวมวัตถุกับString
; มิฉะนั้นโปรแกรมเมอร์ Java จะสาปแช่งตลอดทั้งวัน (งบงบจะออกจากการควบคุม)
คำจำกัดความของทั้งสองมาจากhttp://en.wikipedia.org/wiki/Type_system มันบอกว่ามันดีกว่าที่ฉันจะทำได้
if
บล็อกหรือตรรกะที่ซับซ้อนมากขึ้น (แม้กระทั่งรันไทม์หรือแบบไดนามิก) บรรทัดถัดไปจะถูกกฎหมายและปลอดภัยจากข้อผิดพลาด
อาร์กิวเมนต์หลักสำหรับการพิมพ์ที่อ่อนแอเป็นหนึ่งในประสิทธิภาพ (นี่คือการตอบคำถาม OPs ตามที่ระบุไว้) มีการสนทนาที่ดีมากมายเกี่ยวกับไดนามิกและคงที่โดยนัยกับชัดเจน เป็นต้น
C เป็นภาษาที่พิมพ์ที่มีชื่อเสียงที่สุดและไม่มีการตรวจสอบเวลาทำงานหรือตรวจสอบเวลารวบรวมของชนิดตัวแปร ในสาระสำคัญคุณสามารถโยนchar *
ไปยังint *
และภาษาที่ไม่ต้องการการดูแล แล้วทำไมคุณถึงทำเช่นนี้?
การเขียนโปรแกรม C ค่อนข้างใกล้เคียงกับวิธีที่คุณจะทำสิ่งต่างๆด้วยชุดประกอบดังนั้นจึงมีบางครั้งที่คุณสนใจเฉพาะที่อยู่ ไม่ใช่เรื่องผิดปกติที่จะส่งต่อหรือvoid *
อ้างอิงด้วยเหตุผลอย่างนั้น หากคุณรู้ว่าหน่วยความจำมีการจัดระเบียบอย่างไร (เป็นข้อกังวลเกี่ยวกับแอสเซมบลีและแอสเซมบลี) อีกครั้งคุณสามารถทำการคำนวณที่น่าสนใจตามที่อยู่ในvoid *
เพื่อรับข้อมูลที่คุณต้องการ สิ่งนี้ช่วยให้คุณสามารถทำให้กระบวนการที่คุณต้องทำใน Java เป็นการลัดวงจร
ในขณะที่การตรวจสอบชนิดรันไทม์ไม่ได้มีค่าใช้จ่ายพิเศษ แต่ก็มีบางครั้งที่มันเพียงพอที่จะทำให้ส่วนที่สำคัญนั้นช้าเกินไป ฉันคิดว่าส่วนใหญ่เกี่ยวกับการเขียนโปรแกรมแบบฝังตัวและระบบเรียลไทม์ในกรณีนี้
ที่กล่าวว่าในกรณีส่วนใหญ่มีระบบประเภทที่แข็งแกร่งที่มีการตรวจสอบเวลารวบรวมหรือตรวจสอบ runtime ช่วยบ่อยกว่าเจ็บ
การพิมพ์ที่อ่อนแอนั้นง่ายกว่าสำหรับมือใหม่ที่จะเข้าใจเช่นในสิ่งต่าง ๆ เช่น excel, javascript และ vbscript คุณสามารถแลกเปลี่ยนความเร็วในการพัฒนาเพื่อหาข้อผิดพลาดที่อาจเกิดขึ้น
บทความที่ดีเกี่ยวกับเรื่อง: การพิมพ์ที่แข็งแกร่งและการทดสอบที่แข็งแกร่ง