ฉันไม่เคยเข้าใจข้อความเช่นนี้ ความซื่อสัตย์แม้ว่าคุณจะประกาศฟังก์ชั่นการส่งคืนคุณสามารถและจะลืมมันหลังจากที่คุณเขียนโค้ดหลายบรรทัดและคุณจะต้องกลับไปที่บรรทัดที่ประกาศไว้โดยใช้ฟังก์ชันการค้นหาของ แก้ไขข้อความของคุณเพื่อตรวจสอบ
มันไม่เกี่ยวกับการที่คุณลืมประเภทผลตอบแทน - สิ่งนี้จะเกิดขึ้นเสมอ เป็นเรื่องเกี่ยวกับเครื่องมือที่สามารถแจ้งให้คุณทราบว่าคุณลืมประเภทส่งคืน
นอกจากนี้เมื่อมีการประกาศฟังก์ชั่นด้วยประเภทการfuncname()...
รู้รอบประเภทคุณจะต้องค้นหาแต่ละบรรทัดที่เรียกใช้ฟังก์ชั่นเพราะคุณรู้เพียงว่าfuncname
ในขณะที่ใน Python และสิ่งที่คล้ายกันคุณสามารถค้นหาdef funcname
หรือfunction funcname
เกิดขึ้นเพียงครั้งเดียว ที่ประกาศ
นี่เป็นเรื่องของไวยากรณ์ซึ่งไม่เกี่ยวข้องอย่างสมบูรณ์จากการพิมพ์แบบคงที่
ไวยากรณ์ของตระกูล C นั้นไม่เป็นมิตรเมื่อคุณต้องการค้นหาคำแถลงโดยไม่ต้องใช้เครื่องมือพิเศษใด ๆ ภาษาอื่นไม่มีปัญหานี้ ดูไวยากรณ์ประกาศของ Rust:
fn funcname(a: i32) -> i32
ยิ่งกว่านั้นด้วย REPLs การทดสอบฟังก์ชั่นการกลับมาของอินพุตที่แตกต่างกันเล็กน้อยในขณะที่ภาษาที่พิมพ์แบบคงที่คุณจะต้องเพิ่มโค้ดบางบรรทัดและคอมไพล์ใหม่ทุกอย่างเพื่อให้ทราบถึงชนิดที่ประกาศ
สามารถตีความภาษาใดก็ได้และภาษาใดก็ได้ที่มี REPL
ดังนั้นนอกเหนือจากการทราบประเภทการคืนค่าของฟังก์ชันที่เห็นได้ชัดว่าไม่ใช่จุดแข็งของภาษาที่พิมพ์แบบคงที่การพิมพ์แบบคงที่มีประโยชน์มากในโครงการขนาดใหญ่อย่างไร
ฉันจะตอบอย่างเป็นนามธรรม
โปรแกรมประกอบด้วยการดำเนินการต่าง ๆ และการดำเนินการเหล่านั้นถูกจัดวางในแบบที่เป็นเพราะสมมติฐานบางอย่างที่ผู้พัฒนาสร้างขึ้น
สมมติฐานบางอย่างเป็นนัยและบางอย่างชัดเจน สมมติฐานบางข้อเกี่ยวข้องกับการดำเนินงานที่อยู่ใกล้พวกเขาบางข้อเกี่ยวข้องกับการดำเนินการ ข้อสันนิษฐานนั้นง่ายต่อการระบุเมื่อมีการแสดงออกอย่างชัดเจนและใกล้เคียงที่สุดกับสถานที่ที่คุณค่าของความจริงมีความสำคัญ
ข้อผิดพลาดคือการรวมตัวกันของข้อสันนิษฐานที่มีอยู่ในโปรแกรม แต่ไม่ได้ถือในบางกรณี ในการติดตามบั๊กเราต้องระบุข้อผิดพลาดที่ผิดพลาด ในการลบข้อผิดพลาดเราจำเป็นต้องลบข้อสันนิษฐานนั้นออกจากโปรแกรมหรือเปลี่ยนแปลงบางอย่างเพื่อให้สมมติฐานนั้นมีอยู่จริง
ฉันต้องการจัดหมวดหมู่สมมติฐานเป็นสองประเภท
ชนิดแรกคือสมมติฐานที่อาจจะมีหรือไม่มีก็ได้ทั้งนี้ขึ้นอยู่กับอินพุตของโปรแกรม ในการระบุข้อผิดพลาดประเภทนี้เราจำเป็นต้องค้นหาพื้นที่ของอินพุตที่เป็นไปได้ทั้งหมดของโปรแกรม การใช้การคาดเดาที่มีการศึกษาและการคิดอย่างมีเหตุผลทำให้เราสามารถ จำกัด ปัญหาและค้นหาในพื้นที่ที่เล็กลงได้ แต่ถึงกระนั้นเมื่อโปรแกรมเติบโตขึ้นเล็กน้อยพื้นที่ป้อนข้อมูลเริ่มต้นของมันจะเติบโตในอัตราที่มหาศาล - จนถึงจุดที่สามารถพิจารณาได้ไม่สิ้นสุดสำหรับการใช้งานจริงทั้งหมด
ชนิดที่สองคือสมมติฐานที่มีอยู่สำหรับอินพุตทั้งหมดหรือไม่ถูกต้องสำหรับอินพุตทั้งหมด เมื่อเราระบุข้อสันนิษฐานว่าผิดพลาดเราไม่จำเป็นต้องเรียกใช้โปรแกรมหรือทดสอบอินพุตใด ๆ เมื่อเราระบุข้อสันนิษฐานประเภทนี้ว่าถูกต้องเรามีผู้ต้องสงสัยน้อยกว่าที่จะสนใจว่าเมื่อใดที่เราติดตามข้อบกพร่อง ( ข้อบกพร่องใด ๆ ) ดังนั้นจึงมีคุณค่าในการมีสมมติฐานมากที่สุดเท่าที่เป็นไปได้ในประเภทนี้
ในการวางสมมติฐานในหมวดหมู่ที่สอง (เสมอจริงหรือเท็จเสมอไม่ขึ้นอยู่กับอินพุต) เราต้องการข้อมูลจำนวนน้อยที่สุดเพื่อให้สามารถใช้งานได้ในสถานที่ที่มีการสันนิษฐาน ในซอร์สโค้ดของโปรแกรมข้อมูลจะค้างอย่างรวดเร็ว (ตัวอย่างเช่นคอมไพเลอร์จำนวนมากไม่ทำการวิเคราะห์ระหว่างกระบวนการซึ่งทำให้การโทรใด ๆ เป็นขอบเขตที่ยากสำหรับข้อมูลส่วนใหญ่) เราต้องการวิธีในการเก็บข้อมูลที่จำเป็นใหม่ (ถูกต้องและใกล้เคียง)
วิธีหนึ่งคือการให้แหล่งข้อมูลนี้ใกล้เคียงที่สุดกับสถานที่ที่จะถูกใช้ไป แต่อาจเป็นไปไม่ได้สำหรับกรณีการใช้งานส่วนใหญ่ อีกวิธีหนึ่งคือการทำซ้ำข้อมูลบ่อย ๆ ต่ออายุความเกี่ยวข้องข้ามรหัสแหล่งที่มา
อย่างที่คุณสามารถคาดเดาได้แล้วสแตติกชนิดนั้นจะเป็นแบบนั้น - บีคอนของข้อมูลประเภทที่กระจัดกระจายไปทั่วซอร์สโค้ด ข้อมูลนั้นสามารถใช้เพื่อตั้งสมมติฐานส่วนใหญ่เกี่ยวกับความถูกต้องของประเภทในหมวดที่สองซึ่งหมายความว่าการดำเนินการใด ๆ สามารถจำแนกได้ว่าถูกต้องเสมอหรือไม่ถูกต้องเสมอเมื่อเทียบกับความเข้ากันได้ของประเภท
เมื่อประเภทของเราไม่ถูกต้องการวิเคราะห์จะช่วยประหยัดเวลาของเราโดยนำข้อผิดพลาดมาที่ความสนใจของเราเร็วกว่าที่จะสาย เมื่อประเภทของเราถูกต้องการวิเคราะห์จะช่วยเราประหยัดเวลาด้วยการทำให้แน่ใจว่าเมื่อเกิดข้อผิดพลาดเราสามารถแยกแยะข้อผิดพลาดประเภทได้ทันที