गुइडो वॉन रोसुम
गुइडो वान रोसुम के साथ एक साक्षात्कार से , जिसे books.google.com (जोर मेरा) के साथ पूर्ण संदर्भ में देखा जा सकता है :
समूहन के लिए इंडेंटेशन का विकल्प पायथन में एक उपन्यास अवधारणा नहीं थी; मुझे यह एबीसी से विरासत में मिला , लेकिन यह एक पुरानी भाषा के रूप में भी हुआ। मुझे नहीं पता कि अगर एबीसी लेखकों को विचार मिला है, या स्वतंत्र रूप से इसका आविष्कार किया है, या यदि कोई सामान्य पूर्वज था। बेशक, मैं चुना एबीसी के नेतृत्व का पालन नहीं करने हो सकता था, जैसा कि मैंने अन्य क्षेत्रों (जैसे, एबीसी, भाषा कीवर्ड और प्रक्रिया नाम के लिए अपरकेस का इस्तेमाल किया एक विचार मैं कॉपी नहीं किया है), में किया था , लेकिन मैं सुविधा की तरह आया था काफी एबीसी का उपयोग करते समय बिट, क्योंकि यह उस समय सी उपयोगकर्ताओं के बीच एक निश्चित प्रकार की व्यर्थ बहस के साथ दूर करना प्रतीत होता था , जहां घुंघराले ब्रेसिज़ को रखना है ।
वॉन रोसुम एबीसी से काफी प्रेरित था , और भले ही उसे यह सब कॉपी करने की ज़रूरत नहीं थी, लेकिन इंडेंटेशन का उपयोग इसलिए रखा गया क्योंकि यह धार्मिक युद्धों से बचने में फायदेमंद हो सकता है।
मैं यह भी अच्छी तरह से जानता था कि पठनीय कोड समूहन को इंगित करने के लिए स्वेच्छा से वैसे भी इंडेंटेशन का उपयोग करता है , और मैं कोड में सूक्ष्म कीड़े भर में आ गया था जहां घुंघराले ब्रेसिज़ का उपयोग करके सिंटेक्टिक ग्रुपिंग से असहमति व्यक्त की गई - प्रोग्रामर और किसी भी समीक्षक ने यह मान लिया था कि इंडेंटेशन ग्रुपिंग से मेल खाता है और इसलिए बग पर ध्यान नहीं दिया गया। फिर से, एक लंबे डिबगिंग सत्र ने एक मूल्यवान सबक सिखाया।
रोसुम ने समूहन और इंडेंट के बीच असंगतता के कारण बग को भी देखा, और जाहिर तौर पर हालांकि कोड को संरचना करने के लिए केवल इंडेंटेशन पर भरोसा करना प्रोग्रामिंग त्रुटियों 1 से सुरक्षित होगा ।
डोनाल्ड ई। नूथ और पीटर जे। लैंडिन
संदर्भित साक्षात्कार में, गुइडो ने इंडेंटेशन का उपयोग करने के डॉन नूथ के विचार का उल्लेख किया। यह द नॉथ इंडेंटेशन उद्धरण में विस्तृत है , जिसे गोटो स्टेटमेंट्स के साथ स्ट्रक्चर्ड प्रोग्रामिंग का उद्धरण दिया गया है । नुथ ने पीटर जॉन लैंडिन की अगली 700 प्रोग्रामिंग भाषाओं (इंडेंटेशन के बारे में चर्चा अनुभाग देखें) का भी संदर्भ दिया । लैंडिन ने ISWIM को डिज़ाइन किया जो शुरुआती / अंत ब्लॉकों के बजाय इंडेंटेशन वाली पहली भाषा की तरह दिखता है। वे कागजात संरचित कार्यक्रमों के लिए इंडेंटेशन का उपयोग करने की व्यवहार्यता के बारे में अधिक हैं, बल्कि ऐसा करने के पक्ष में वास्तविक तर्क।
1. मुझे लगता है कि यह वास्तव में प्रोग्रामिंग त्रुटियों से पकड़ने और पुनर्प्राप्त करने के लिए समूह निर्माण और ऑटो-स्वरूपण दोनों के पक्ष में एक तर्क है , जो होने के लिए बाध्य हैं। यदि आप पायथन में अपना इंडेंटेशन खराब करते हैं, तो आपके कोड को डिबग करने वाले व्यक्ति को अनुमान लगाना होगा कि कौन सा सही है:
if (test(x)):
foo(x)
bar(x)
दूँ bar
हमेशा कहा जा या केवल परीक्षण सफल होने के तो क्या होगा?
समूह निर्माण, अतिरेक का एक स्तर जोड़ते हैं जो आपको अपने कोड को ऑटो-इंडेंट करने में गलती करने में मदद करते हैं। सी में, समतुल्य कोड निम्न प्रकार से ऑटो-इंडेंट किया जा सकता है:
if (test(x))
foo(x);
bar(x);
अगर मैं bar
उसी स्तर पर रहने का इरादा रखता हूं foo
, तो कोड संरचना के आधार पर ऑटो-इंडेंटिंग मुझे यह देखने देता है कि कुछ गड़बड़ है जिसे चारों ओर ब्रेसिज़ जोड़कर ठीक किया जा सकता है foo
और bar
।
में अजगर: मिथकों इंडेंटेशन के बारे में , वहाँ सी से एक माना जाता है कि बुरा उदाहरण है:
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
उपरोक्त जैसा ही मामला है, Emacs में, मैं पूरे ब्लॉक / फ़ंक्शन को हाइलाइट करता हूं, टैब को दबाता हूं, और फिर सभी कोड को रीवाइंड किया जाता है। मानव इंडेंटेशन और कोड संरचना के बीच विसंगति मुझे बताती है कि कुछ बंद है (और पूर्ववर्ती टिप्पणी!)।
इसके अलावा, मध्यवर्ती कोड जहां इंडेंटेशन सी में बंद है बस मास्टर शाखा के माध्यम से इसे नहीं बनाता है, जगह में सभी शैली की जांच जीसीसी / जेनकिंस मुझ पर चिल्लाएगी। मुझे हाल ही में पायथन में ऊपर वर्णित एक के समान एक समस्या थी, एक स्तर के इंडेंटेशन द्वारा एक बयान के साथ। कभी-कभी मेरे पास सी में कोड होता है जो एक समापन ब्रेस से परे होता है, लेकिन फिर मैंने टैब मारा और कोड "गलत तरीके से" संकेत देता है: यह बग को देखने का एक और मौका है।
let x =1; y = 2; z = 3
पूरी तरह से मान्य है, जैसा हैdo { putStrLn $ show x; putStrLn $ show y; putStrLn $ show z; }
। वे एक ही लाइन पर होने की जरूरत नहीं है।