Guido Von Rossum
จากการสัมภาษณ์กับ Guido Van Rossumซึ่งสามารถอ่านได้เต็มรูปแบบกับ books.google.co.th (เน้นที่เหมือง):
ทางเลือกของการเยื้องสำหรับการจัดกลุ่มไม่ใช่แนวคิดใหม่ใน Python; ฉันสืบทอดสิ่งนี้จาก ABCแต่มันก็เกิดขึ้นใน Occam ซึ่งเป็นภาษาเก่ากว่า ฉันไม่รู้ว่าผู้เขียน ABC ได้รับความคิดจาก Occam หรือคิดค้นมันขึ้นมาเองหรือว่ามีบรรพบุรุษร่วมกัน แน่นอนฉันจะได้เลือกที่จะไม่ทำตามนำของเอบีซีที่ผมทำในพื้นที่อื่น ๆ (เช่นเอบีซีใช้ตัวพิมพ์ใหญ่สำหรับคำหลักภาษาและชื่อกระบวนความคิดผมไม่ได้คัดลอก) แต่ผมได้มาเช่นคุณลักษณะค่อนข้าง บิตในขณะที่ใช้เอบีซีตามที่มันดูเหมือนจะทำไปด้วยบางประเภทของการอภิปรายทั่วไปไม่มีจุดหมายในหมู่ Cผู้ใช้ในเวลาที่เกี่ยวกับตำแหน่งที่จะวางวงเล็บปีกกา
Von Rossum ได้รับแรงบันดาลใจอย่างมากจากABCและแม้ว่าเขาไม่จำเป็นต้องคัดลอกทั้งหมดการใช้การเยื้องก็ถูกเก็บไว้เพราะมันจะมีประโยชน์ในการหลีกเลี่ยงสงครามศาสนา
ฉันยังทราบดีว่ารหัสที่อ่านได้ใช้การเยื้องอย่างสมัครใจเพื่อระบุการจัดกลุ่มและฉันได้พบข้อบกพร่องเล็กน้อยในรหัสที่การเยื้องไม่เห็นด้วยกับการจัดกลุ่มวากยสัมพันธ์โดยใช้เครื่องหมายปีกกา - ผู้เขียนโปรแกรมและผู้ตรวจทานใด ๆ สันนิษฐานว่า และดังนั้นจึงไม่ได้สังเกตเห็นข้อผิดพลาด อีกครั้งเซสชันการดีบักที่ยาวนานสอนบทเรียนที่มีค่า
ซัมยังเป็นพยานในข้อผิดพลาดอันเนื่องมาจากความไม่สอดคล้องกันระหว่างการจัดกลุ่มและเยื้องและเห็นได้ชัดว่าที่อาศัยเยื้องเพียงโครงสร้างรหัสจะปลอดภัยจากการเขียนโปรแกรมข้อผิดพลาด1
Donald E. Knuth และ Peter J. Landin
ในการสัมภาษณ์อ้างอิง Guido กล่าวถึงแนวคิดของ Don Knuth ในการใช้การเยื้อง นี้เป็นรายละเอียดในนูเยื้องอ้างค้นพบซึ่งคำพูดที่มีโครงสร้างการเขียนโปรแกรมด้วยงบโกโตะ Knuth ยังอ้างอิงถึง Peter John Landin ของภาษาการเขียนโปรแกรมอีก 700 ภาษา (ดูหัวข้อการสนทนาเกี่ยวกับการเยื้อง) Landin ออกแบบISWIMซึ่งดูเหมือนภาษาแรกที่มีการเยื้องแทนที่จะเป็นบล็อกเริ่มต้น / สิ้นสุด เอกสารเหล่านั้นเกี่ยวกับความเป็นไปได้ของการใช้การเยื้องสำหรับการจัดโครงสร้างโปรแกรมแทนที่จะเป็นข้อโต้แย้งที่แท้จริงในการทำเช่นนั้น
1.ผมคิดว่านี่คือในความเป็นจริงข้อโต้แย้งในความโปรดปรานของการมีทั้งโครงสร้างการจัดกลุ่มและการจัดรูปแบบอัตโนมัติเพื่อที่จะจับและการกู้คืนจากข้อผิดพลาดในการเขียนโปรแกรมซึ่งจะผูกพันที่จะเกิดขึ้น หากคุณทำให้การเยื้องของคุณเป็น Python บุคคลที่ดีบั๊กโค้ดของคุณจะต้องเดาว่าถูกต้องหรือไม่:
if (test(x)):
foo(x)
bar(x)
จะbar
ถูกเรียกหรือเฉพาะเมื่อการทดสอบสำเร็จหรือไม่
โครงสร้างการจัดกลุ่มเพิ่มระดับความซ้ำซ้อนที่ช่วยให้คุณเห็นข้อผิดพลาดเมื่อคุณเยื้องรหัสของคุณโดยอัตโนมัติ ใน C โค้ดเทียบเท่าสามารถเยื้องอัตโนมัติได้ดังนี้
if (test(x))
foo(x);
bar(x);
ถ้าฉันมีไว้สำหรับbar
ให้อยู่ในระดับเดียวกับที่foo
แล้วอัตโนมัติเยื้องขึ้นอยู่กับโครงสร้างรหัสให้ฉันเห็นว่ามีสิ่งผิดปกติที่สามารถแก้ไขได้โดยการเพิ่มวงเล็บรอบและ
foo
bar
ในPython: ตำนานเกี่ยวกับการเยื้องมีตัวอย่างที่ไม่ดีจาก C:
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
นั่นเป็นกรณีเดียวกันข้างต้นใน Emacs ฉันเน้นทั้งบล็อก / ฟังก์ชั่นกด Tab จากนั้นโค้ดทั้งหมดจะถูกนำมาใส่ใหม่ ความแตกต่างระหว่างการเยื้องของมนุษย์และโครงสร้างรหัสบอกฉันว่ามีบางอย่างปิดอยู่ (นั่นและความคิดเห็นก่อนหน้านี้!)
นอกจากนี้รหัสกลางที่การเยื้องปิดใน C ก็ไม่ได้ทำให้ผ่านสาขาหลักการตรวจสอบสไตล์ทั้งหมดจะทำให้ GCC / Jenkins กรีดร้องใส่ฉัน เมื่อเร็ว ๆ นี้ฉันมีปัญหาคล้ายกับที่อธิบายไว้ข้างต้นใน Python พร้อมกับแถลงการณ์โดยการเยื้องระดับหนึ่ง บางครั้งฉันมีรหัสใน C ซึ่งเกินกว่าวงเล็บปิด แต่จากนั้นฉันกด Tab และรหัสเยื้อง "ผิด": นั่นเป็นอีกโอกาสหนึ่งที่จะเห็นข้อบกพร่อง
let x =1; y = 2; z = 3
do { putStrLn $ show x; putStrLn $ show y; putStrLn $ show z; }
สิ่งเหล่านั้นไม่จำเป็นต้องอยู่ในบรรทัดเดียวกัน