[संगीत बजाना] डौग लॉयड: ठीक है। एक अजीब विषय की तरह है, है ना? जादुई संख्या। वह जब वह मतलब क्या हरिणी जादुई संख्या के बारे में बात कर रही है? खैर, कुछ कार्यक्रमों के हम CS50 में लिखा है कि अब तक कुछ अजीब पड़ा है संख्या की तरह उन्हें में फेंक दिया। शायद कारणों के लिए हम नहीं करते पूरी तरह से ठीक है अब समझते हैं। उदाहरण के लिए, मारियो समस्या में, हम 23 पर पिरामिड की ऊंचाई छाया हुआ है। हम स्पष्ट रूप से आप ने कहा अधिक से अधिक 23 नहीं जा सकते। लेकिन 23 क्या मतलब है? खैर, आप पढ़ सकते हैं , ध्यान से आप कल्पना देखा गया है कि हो सकता है कारण है कि हम 23 पर यह छाया हुआ मानक ऊंचाई क्योंकि एक टर्मिनल विंडो के 24 है। और हम हैं यदि हां पिरामिड है कि अधिक से लम्बे हो, यह इस अजीब बात यह है कि ऐसा हो सकता है जहां यह बंद स्क्रीन रन। आप जानते हैं और, क्या करता है कि ठीक है, के संदर्भ में क्या मतलब है? 23 तुरंत स्पष्ट का अर्थ है किसी के लिए, जो अपने कार्यक्रम पर लग रहा है और शायद एक अलग है आकार टर्मिनल विंडो? शायद नहीं। यह ठीक है, जैसा लगता है। खैर, ऐसा क्यों है कि अभी कम से कम 23 से अधिक है? सामान्य में, यह एक तरह है एक बुरी आदत से वास्तव में अपने कोड में स्थिरांक लिखने के लिए। आप वास्तव में क्या है, जब ऐसा करने में अपने कोड में एक निरंतर लिखते हैं, यह प्रयोग कर के रूप में भेजा कभी कभी जादुई संख्या, जो कुछ है हम आम तौर पर कोशिश करते हैं और बचना चाहते हैं। उदाहरण के लिए, एक नजर डालते हैं यहाँ इस सादे समारोह में। जाहिर है कोई डाटा नहीं है सी में टाइप कार्ड या डेक बुलाया। तो बस मेरे साथ सहन। यह एक छोटा सा है स्यूडोकोड यहाँ में मिलाया। यह कहा जाता है एक समारोह है जाहिर है कि कार्ड सौदा इसकी पैरामीटर के रूप में एक डेक लेता है, और मेरे लिए उत्पादन होगा एक ही कार्ड। और मैं यहाँ जहां मैं कुछ कर रहा हूँ , 0-52 चलता है कि एक पाश है और मैं एक कार्ड सौदा। खैर, हम एक जादू मिल गया है यहाँ में नंबर, सही है। आप जादुई संख्या है क्या देखते हैं? या अधिक महत्वपूर्ण बात, आप करते हैं यहाँ समस्या क्या है? विशेष रूप से इस करता है, तो सिर्फ एक समारोह है एक में अपनी फाइल में फ़ोल्डर है जिसमें अलग से एक गुच्छा फाइलें, जिनमें से प्रत्येक का ताश के पत्तों की एक डेक करने के लिए एक और बात करता है। शायद यह उन shuffles, या एक हाथ सौदों पांच कार्ड के बजाय एक ही कार्ड की। तुम क्या देखते हो यहाँ समस्या हो सकती है? आप जादुई संख्या को देखते हैं मैं कोड में इंजेक्शन है? यह सही है, 52 है। की तरह है, intuitively आप शायद जानते हैं, ठीक है। का एक मानक डेक की तरह कार्ड 52 कार्ड होते हैं। लेकिन हमारे कार्यक्रम में, यह सिर्फ है एक तरह से वहाँ में खाक छानने। अचानक एक 52 वहाँ की तरह है। इस को हल करने के लिए एक ही रास्ता समस्या यह करने के लिए है। अब हम बहुत स्पष्ट रूप से कर रहे हैं 52 के रूप में डेक आकार बाहर बुला रही है। ऐसा लगता है कि एक छोटे से अधिक सहज ज्ञान युक्त देता है जब पाश के लिए में अर्थ हम तो, मैं कहता हूँ पर बाद में डेक आकार की तुलना में कम है। यह सिर्फ 52 कह से बेहतर लगता है। अब यह वास्तव में इस समस्या को ठीक करता है। यह कुछ प्रतीकात्मक देता है स्थिर करने के लिए, जिसका अर्थ है। लेकिन यह एक तरह से वास्तव में है एक और समस्या का परिचय कि तुरंत स्पष्ट नहीं हो सकता है। यहां तक ​​कि इस चर यदि globally-- घोषित किया जाता है आप इसे क्या याद है हम घोषणा करते हैं जब इसका मतलब विश्व स्तर पर स्थानीय स्तर पर की तुलना में एक चर? हम एक चर घोषणा भले ही विश्व स्तर पर, क्या अगर वहाँ एक अन्य समारोह में कार्यों के हमारे कमरे कार्ड हेरफेर के साथ सौदा है कि कि अनजाने में, डेक आकार में परिवर्तन या इसके द्वारा यह बढ़ जाती है 1 या इसे 1 से कम हो जाती है। यह ठीक है, मुसीबत जादू सकता है? हम एक सेट के साथ काम कर रहे हैं, खासकर अगर कार्ड का पूरा डेक फेरबदल जहां आवश्यक है। डेक आकार कम हो जाती है तो 1 से, उदाहरण के लिए, 51 को, हम वास्तव में फेरबदल नहीं कर रहे हैं संभवतः सभी कार्ड। हम उनमें से एक बाहर जा रहे हैं। और कहा कि मूल्य शायद हो सकता है भविष्यवाणी की है या एक बुरा अभिनेता द्वारा शोषण किया। सी एक क्या कहा जाता है प्रदान करता है पूर्वप्रक्रमक निर्देश, जो यह भी एक मैक्रो के लिए कहा जाता है प्रतीकात्मक स्थिरांक बनाने। और वास्तव में, यदि आप पहले से ही है एक पूर्वप्रक्रमक निर्देश देखा, आप यह नहीं सुना है, भले ही # शामिल साथ कि कहा जाता है। यह एक मैक्रो का एक और उदाहरण है या पूर्वप्रक्रमक निर्देश। जिस तरह से प्रतीकात्मक स्थिरांक बनाने के लिए, या एक स्थिर करने के लिए एक नाम दे रही है यह अधिक है तो यह है कि जिसका अर्थ है, इस प्रकार है। #define, नाम, प्रतिस्थापन। एक तरफ वास्तव में महत्वपूर्ण यहाँ बहुत जल्दी। पर एक अर्धविराम मत डालो अपने #defines के अंत। तो यह #define, नाम, प्रतिस्थापन है। अपने कार्यक्रम संकलित किया जाता है, क्या वास्तव में होता है जा रहा है, तो संकलक है अपने कोड के माध्यम से जाने के लिए और के हर उदाहरण की जगह साथ जो कुछ शब्द "नाम" आप स्थानापन्न के रूप में डाल दिया। तुलनात्मक रूप से, # शामिल है, तो प्रकार की कॉपी करने और चिपकाने के समान है, तो #define की तरह है खोजने के लिए और जगह के लिए समान है, क्या तुमने कभी एक में है कि सुविधा का उपयोग किया है वर्ड प्रोसेसिंग प्रोग्राम, उदाहरण के लिए। उदाहरण के लिए, यदि ऐसा है तो मैं 3.14159265 के रूप में गड़बड़ी #define, क्या आप बेहतर गणितीय कर रहे हैं झुका और आप अचानक 3.14159265 उड़ते देखा चारों ओर अपने कोड में, आप शायद यह गड़बड़ी के बारे में बात कर रहा है पता है। लेकिन हो सकता है कि हम इसे एक दे सकते हैं छोटे से अधिक प्रतीकात्मक अर्थ। और हम बजाय #define कह सकते हैं नंबरों की कि कौर के रूप में गड़बड़ी मैं रखने के लिए नहीं जा रहा हूँ कि और अधिक से अधिक पढ़ने। और क्या उसके बाद होने जा रहा है कार्यक्रम है जब संकलन समय है संकलित, पहली बात यह है कि क्या होगा इसके माध्यम से जाना होगा और यह हर समय बदल देगा आईटी, कैपिटल पी, पूंजी मैं देखता यह सचमुच के साथ की जगह लेंगे 3.14 और इतने पर, इतना है कि आप यह हर प्रकार की जरूरत नहीं है अभी भी समय अपने कार्यक्रम जबकि कार्यक्षमता है कि आप आप काम कर रहे हैं, क्योंकि उम्मीद छेड़खानी के साथ, गुणा, यह गड़बड़ी से जो कुछ भी है, विभाजित। आप इस तक सीमित नहीं हैं केवल संख्या के लिए प्रतिस्थापन। उदाहरण के लिए, मैं परिभाषित कर सकता है स्ट्रिंग CS50 के रूप में पाठ्यक्रम। इस मामले में, जब कार्यक्रम संकलित किया गया है, # परिभाषित के माध्यम से जाना होगा कोड, हर बार की जगह यह स्ट्रिंग CS50 के साथ "पाठ्यक्रम" देखता है। आप यहाँ पर ध्यान देंगे भी मुझे लगता है कि बार-बार #define मेरे सारे प्रतीकात्मक परिभाषित स्थिरांक, तो बात है, सभी टोपियां में हमेशा से रहे हैं। यह एक सम्मेलन है। यह आवश्यक नहीं है। कारण आम तौर पर लोगों का उपयोग करेगा सभी राजधानियों वे #defining रहे हैं जब सिर्फ इतना है कि यह वास्तव में स्पष्ट करने के लिए किया जाता है मेरे कोड के इस विशेष तत्व एक परिभाषित स्थिर है। यह लोअरकेस था, यह संभव है कि यह एक चर के साथ भ्रमित किया जा सकता है। और कहा कि शायद है एक अच्छी बात यह है कि ऐसा करने के लिए नहीं। इसलिए इस विशेष समाधान में ज्यादा बेहतर है पिछले वाले से किसी से भी। जब मैं पहली बार #define डेक आकार 52, तब तो अब यहां 52, या डेक आकार के मेरे प्रयोग, एक बहुत अधिक सहज और एक बहुत सुरक्षित है। आप एक निरंतर हेरफेर नहीं कर सकते। आप 52 प्लस प्लस नहीं कह सकता। यही कारण है कि 53 के लिए इसे बदलने के लिए नहीं जा रहा है। यदि आप कुछ करने के लिए 52 को बदल नहीं सकते। आप एक चर बदल सकते हैं जिसका मूल्य 52 है, जो हम पहले था पहले तय किया गया था। और अगर आप को बढ़ा सकता है 53 कि चर। लेकिन अगर आप 52 प्लस प्लस और नहीं कह सकता अचानक 53 में 52 की बारी है कि लोगों की है। 52 हमेशा 52 है। और तो आप अनजाने में परिवर्तन नहीं कर सकते इसे यहाँ से छेड़छाड़ डेक आकार, एक और अच्छी टीम हालांकि इस का असर है कि जैसा कि आप जानते हैं कि नहीं दुनिया भर के सभी देशों आकार 52 के कार्ड के डेक का उपयोग करें? उदाहरण के लिए, यह वास्तव में आम है जर्मनी, 32 की एक डेक के आकार का उपयोग करने के लिए वे कुछ बाहर पट्टी जहां कम मूल्य ताश के पत्तों की। और इस मामले में, मुझे लगता है पोर्ट मेरे कमरे चाहता था साथ सौदा है कि कार्यों की जर्मनी के लिए कार्ड में गड़बड़ी। मैं पहले उदाहरण में कर सकते थे हम पता चला है, जाने के लिए और जगह है 32 के साथ अपने कोड में 52 के सभी उदाहरणों। लेकिन यहां मैं परिभाषित करता है, तो डेक आकार मेरे कोड के ऊपर से ही 32 के रूप में, मैं इसे बदलने की जरूरत है, तो मैं कर सकता हूँ बस जाओ और एक बात है कि बदल जाते हैं। मेरे कोड फिर कंपाइल करने, और सभी के अचानक यह माध्यम से प्रसारित। वास्तव में, हम डेक को बदल सकते हैं हम चाहते हैं कि किसी भी मूल्य के लिए आकार। मैं एक में आप ब्याज सकता है डेक आकार पिक के खेल? मैं डौग लॉयड हूँ। और इस CS50 है।