सारांश
यह पाठ पाठ्यक्रम की पाँचवीं इकाई को समाप्त करता है, जो फ़ंक्शनों को समर्पित है। यह अवधारणाओं की उस शृंखला को फिर से गढ़ता है जो फ़ंक्शन की घोषणा से पुनरावर्तन तक जाती है, और रास्ते में कॉल स्टैक, अनुबंध, पैरामीटरों के पास किए जाने, चरों के स्कोप और जीवनकाल, और क्रमिक परिशोधन द्वारा डिज़ाइन से होकर गुज़रती है; इनमें से जो किसी भी भाषा में लागू होता है उसे उससे अलग करता है जो C++ का अपना है; इकाई के अपरिभाषित व्यवहार को एकत्र करता है, साथ में यह भी कि कंपाइलर किस बारे में चेतावनी देता है, डिटेक्टर क्या रोकता है और किसकी ओर कोई संकेत नहीं करता; अपने समापन मूल्यांकन में प्रवेश मूल्यांकन के कौशल दोहराता है; और छह चुनौतियों के साथ समाप्त होता है जो पूरी इकाई को जोड़ती हैं।
अधिगम उद्देश्य
- किसी समस्या को फ़ंक्शनों में विघटित करना, हर एक को उसके इंटरफ़ेस और उसके अनुबंध (पूर्व-शर्त और पश्च-शर्त) के साथ, और उनका अलग-अलग परीक्षण करना।
- हर पैरामीटर को पास करने का तरीका और परिणाम लौटाने का तरीका चुनना, और चुनाव का औचित्य बताना।
- किसी समस्या को पुनरावर्तन से हल करना, उसकी शुद्धता आगमन से और उसकी समाप्ति एक घटते माप से सिद्ध करना, और कॉलों की संख्या में उसकी लागत का अनुमान लगाना।
- इकाई के अपरिभाषित व्यवहार (
returnके बिना रास्ता, डैंगलिंग रेफ़रेंस, ओवरफ़्लो होने वाला परिणाम, समाप्त हुआ स्टैक) को पहचानना और प्रोग्राम को उसके बिना फिर से लिखना। - इकाई में सीखी गई बातों में से, जो किसी भी भाषा में लागू होता है उसे उससे अलग करना जो C++ का अपना है।
इकाई की उपलब्धियाँ
इकाई का लक्ष्य था किसी समस्या को नाम वाले हिस्सों में विघटित करना सिखाना, हर हिस्से को एक इंटरफ़ेस और एक अनुबंध के साथ, और समस्याओं को पुनरावर्तन से हल करना सिखाना। यह लक्ष्य केवल उन बातों के सहारे पूरा हुआ जिन्हें परिचय ने ज्ञात घोषित किया था: इकाई 4 के लूप, अपने निश्चर और वैरिएंट के साथ, पाठ 1.1 का विनिर्देश और इकाई 2 का मेमोरी का मॉडल। मित्र संख्याओं का प्रोग्राम, जिसका कॉपी किया गया लूप ग़लत संख्या के भाजक जोड़ता था, अब एक ही फ़ंक्शन से लिखा जाता है, जिसे एक बार उसके अनुबंध के विरुद्ध सत्यापित किया गया है।
फ़ंक्शन
पाठ फ़ंक्शन ने फ़ंक्शन को घोषित करना, परिभाषित करना और कॉल करना सिखाया, और तीन क्षणों को अलग किया: कंपाइल करते समय हर कॉल की जाँच पहले देखी गई घोषणा के विरुद्ध होती है; लिंक करते समय परिभाषा खोजी जाती है; चलाते समय आर्ग्युमेंटों की गणना होती है, कॉल स्टैक में एक फ़्रेम बनता है और नियंत्रण बॉडी में कूद जाता है। उसने दिखाया कि जो फ़ंक्शन void नहीं है उसके अंत तक return के बिना पहुँचना अपरिभाषित व्यवहार है, और अनुबंध के साथ समाप्त हुआ, यानी पूर्व-शर्त और पश्च-शर्त, जो ज़िम्मेदारियों को कॉल करने वाले और फ़ंक्शन के बीच बाँटता है।
पैरामीटर और स्कोप
पाठ पैरामीटर और स्कोप ने अध्ययन किया कि डेटा किन रास्तों से भीतर आता है और परिणाम किन रास्तों से बाहर जाते हैं: मान द्वारा पास किया गया पैरामीटर एक प्रति है; रेफ़रेंस द्वारा पास किया गया पैरामीटर कॉल करने वाले की मेमोरी सेल का दूसरा नाम है; कॉन्स्ट रेफ़रेंस बिना प्रति बनाए पढ़ता है। इससे चुनाव का नियम निकलता है (छोटी चीज़ के लिए मान, केवल पढ़ी जाने वाली बड़ी चीज़ के लिए कॉन्स्ट रेफ़रेंस, रेफ़रेंस केवल तब जब बदलना ही उद्देश्य हो) और, कई परिणामों के लिए, संरचित बाइंडिंग के साथ std::pair और std::tuple। उसने किसी नाम के स्कोप को, जो पाठ्य का गुण है, किसी चर के जीवनकाल से अलग किया, जो निष्पादन का गुण है, और उस रेफ़रेंस के साथ समाप्त हुआ जो अपनी मेमोरी सेल से अधिक जीवित रहता है।
फ़ंक्शनों से डिज़ाइन
पाठ फ़ंक्शनों से डिज़ाइन ने सिखाया कि क्रमिक परिशोधन से कैसे तय किया जाए कि कौन-से फ़ंक्शन लिखे जाएँ: एक छोटा main जो केवल घोषित फ़ंक्शनों को कॉल करता है, और फिर हर एक में उतरना, ताकि विघटन एक वृक्ष के रूप में खींचा जा सके। उसने अच्छे इंटरफ़ेस की कसौटियाँ और “एक फ़ंक्शन, एक काम” का नियम तय किया, उसके संकेतों (नाम में समुच्चयबोधक, वह फ़ंक्शन जो एक स्क्रीन में नहीं समाता, फ़्लैग) और छिपे प्रभावों के साथ, जैसे ग्लोबल चर; ओवरलोडिंग को उसके वरीयता-क्रम और अस्पष्ट कॉल के साथ प्रस्तुत किया; और इकाई 4 के एल्गोरिदमों को अलग-अलग परखे गए फ़ंक्शनों के रूप में फिर से लिखा।
पुनरावर्तन
पाठ पुनरावर्तन ने सिखाया कि एक फ़ंक्शन समस्या के छोटे उदाहरण को हल करने के लिए स्वयं को कॉल कर सकता है। उसने छोटी कॉल को सही मानकर आगमन से शुद्धता सिद्ध की, और एक घटते प्राकृत माप से समाप्ति; स्टैक के सहारे उन फ़्रेमों का पीछा किया जो जमा होते हैं और हटते हैं, और दिखाया कि स्टैक कैसे समाप्त होता है; चेताया कि परिणाम का प्रकार स्टैक से बहुत पहले ओवरफ़्लो हो जाता है; और फ़िबोनाची के पुनरावर्ती और पुनरावृत्तीय संस्करणों की तुलना की: कॉल बनाम 29 जोड़, जब गणना की हो।
सामग्री लोड हो रही है…