ब्लॉक (प्रोग्रामिंग)

From Vigyanwiki
Revision as of 08:52, 6 March 2023 by alpha>Vivekdasilavky (Text)

कंप्यूटर प्रोग्रामिंग में, एक ब्लॉक या कोड ब्लॉक या ब्लॉक का कोड स्रोत कोड की एक लेक्सिकल(व्याख्यात्मक) संरचना है जिसे एक साथ समूहीकृत किया जाता है। ब्लॉक में एक या अधिक डिक्लेरेशन और स्टेटमेंट्स होते हैं। एक प्रोग्रामिंग भाषा जो अन्य ब्लॉकों के भीतर ब्लॉक नेस्टिंग सहित ब्लॉक के निर्माण की अनुमति देती है, उसे ब्लॉक-संरचित प्रोग्रामिंग भाषा कहा जाता है। ब्लॉक संरचित प्रोग्रामिंग के लिए मूलभूत हैं, जहां ब्लॉक से नियंत्रण संरचनाएं बनती हैं।

ब्लॉक के दो फंक्शन्स हैं: स्टेटमेंट्स को समूहित करना ताकि उन्हें एक स्टेटमेंट् के रूप में माना जा सके, और नाम स्कोप को परिभाषित करना ताकि उन्हें उसी नाम से अलग किया जा सके जो कहीं और उपयोग किया गया हो। एक ब्लॉक-संरचित प्रोग्रामिंग भाषा में, बाहरी ब्लॉकों में नामित ऑब्जेक्ट आंतरिक ब्लॉकों के अंदर दिखाई देते हैं, जब तक कि वे उसी नाम से घोषित ऑब्जेक्ट द्वारा नाम मास्किंग न हों।

इतिहास

ब्लॉक संरचना के विचार 1950 के दशक में पहले ऑटोकोड के विकास के दौरान विकसित किए गए थे, और उन्हें एल्गोल 58 और एल्गोल 60 विवरण में औपचारिक रूप दिया गया था। एल्गोल 58 ने "कंपाउंड स्टेटमेंट्" की धारणा पेश की, जो केवल पूरी तरह से कन्ट्रोल फ्लो से संबंधित थी।<ref name="algol58_report">Perlis, A. J.; Samelson, K. (1958). "प्रारंभिक रिपोर्ट: अंतर्राष्ट्रीय बीजगणितीय भाषा". Communications of the ACM. New York, NY, USA: ACM. 1 (12): 8–22. doi:10.1145/377924.594925. S2CID 28755282.</ रेफ> बाद की संशोधित रिपोर्ट जिसमें अल्गोल 60 के वाक्य-विन्यास और शब्दार्थ का वर्णन किया गया है, एक ब्लॉक और ब्लॉक गुंजाइश की धारणा को पेश करता है, जिसमें एक ब्लॉक होता है जिसमें घोषणाओं का एक क्रम होता है, जिसके बाद बयानों का एक क्रम होता है और शुरुआत और अंत के बीच संलग्न होता है। जिसमें [e] बहुत घोषणा एक ब्लॉक में इस तरह से प्रकट होती है और केवल उस ब्लॉक के लिए मान्य होती है।<ref name="algol60_report">Backus, J. W.; Bauer, F. L.; Green, J.; Katz, C.; McCarthy, J.; Perlis, A. J.; Rutishauser, H.; Samelson, K.; Vauquois, B.; Wegstein, J. H.; van Wijngaarden, A.; Woodger, M. (May 1960). Naur, Peter (ed.). "एल्गोरिदमिक भाषा ALGOL 60 पर रिपोर्ट". Communications of the ACM. New York, NY, USA: ACM. 3 (5): 299–314. doi:10.1145/367236.367262. ISSN 0001-0782. S2CID 278290. Retrieved 2009-10-27.</रेफरी>

सिंटेक्स

ब्लॉक अलग-अलग भाषाओं में अलग-अलग सिंटैक्स का उपयोग करते हैं। दो व्यापक परिवार हैं:

  • ALGOL परिवार जिसमें ब्लॉक को कीवर्ड द्वारा सीमांकित किया गया हैbeginऔरendया उसके बराबर। C (प्रोग्रामिंग लैंग्वेज) में, ब्लॉक को कर्ली ब्रेसेस द्वारा सीमांकित किया जाता है -{और}. ALGOL 68 कोष्ठकों का उपयोग करता है।
  • कोष्ठक -(और), MS-DOS बैच भाषा में उपयोग किए जाते हैं
  • ऑफ-साइड नियम, जैसा कि पायथन (प्रोग्रामिंग भाषा) में है
  • एस-अभिव्यक्ति जैसे सिंटैक्टिक कीवर्ड के साथ prog या let (जैसा कि लिस्प (प्रोग्रामिंग भाषा) परिवार में है)
  • 1968 में (ALGOL 68 के साथ), फिर Edsger W. Dijkstra की 1974 में गार्डेड कमांड लैंग्वेज#Selection: यदि सशर्त और पुनरावृत्त कोड ब्लॉक को वैकल्पिक रूप से ब्लॉक आरक्षित शब्द के साथ समाप्त कर दिया जाता है: उदा। if ~ then ~ elif ~ else ~ fi, case ~ in ~ out ~ esac और for ~ while ~ do ~ od


सीमाएं

कुछ भाषाएँ जो घोषणाओं के साथ ब्लॉक का समर्थन करती हैं, वे सभी घोषणाओं का पूर्ण समर्थन नहीं करती हैं; उदाहरण के लिए कई सी-व्युत्पन्न भाषाएँ एक ब्लॉक (नेस्टेड समारोह) के भीतर फ़ंक्शन परिभाषा की अनुमति नहीं देती हैं। और अपने पूर्वज अल्गोल के विपरीत, पास्कल किसी मौजूदा ब्लॉक के आरंभ और अंत के अंदर अपनी स्वयं की घोषणाओं के साथ ब्लॉक के उपयोग का समर्थन नहीं करता है, केवल मिश्रित बयानों से बयानों के अनुक्रम को एक साथ समूहीकृत किया जा सकता है अगर, जबकि, दोहराना और अन्य नियंत्रण बयान।

मूल शब्दार्थ

एक ब्लॉक का शब्दार्थ अर्थ दुगना है। सबसे पहले, यह प्रोग्रामर को मनमाने ढंग से बड़े और जटिल ढांचे बनाने का एक तरीका प्रदान करता है जिसे इकाइयों के रूप में माना जा सकता है। दूसरे, यह प्रोग्रामर को वेरिएबल्स के दायरे को सीमित करने और कभी-कभी अन्य वस्तुओं को घोषित करने में सक्षम बनाता है।

फोरट्रान चतुर्थ और बुनियादी जैसी शुरुआती भाषाओं में, कोई स्टेटमेंट ब्लॉक या कंट्रोल स्ट्रक्चर नहीं थे। कंडीशनल के लिए जाओ स्टेटमेंट्स का उपयोग करके सशर्त लागू किए गए थे:

<वाक्यविन्यास प्रकाश लैंग = fortranfixed> सी भाषा: एएनएसआई मानक फोरट्रान 66 C परिकलित किए जाने वाले मानों को प्रारंभ करें

     PAYSX = .FALSE।
     भुगतान = .गलत।
     कर = 0.0
     एसयूपीटीएक्स = 0.0

सी कर कटौती छोड़ें यदि कर्मचारी कर सीमा से कम कमाता है

     IF (WAGES .LE. TAXTHR) GOTO 100
     PAYSX = .TRUE।
     टैक्स = (मजदूरी - टैक्सथर) * BASCRT

C यदि कर्मचारी सुपरटैक्स सीमा से कम कमाता है तो सुपरटैक्स कटौती छोड़ दें

     IF (WAGES .LE. SUPTHR) GOTO 100
     भुगतान = .TRUE।
     SUPTAX = (मजदूरी - SUPTHR) * SUPRAT
 100 कर = मजदूरी - कर - उपकर

</वाक्यविन्यास हाइलाइट>

कार्यक्रम की तार्किक संरचना भाषा में परिलक्षित नहीं होती है, और जब किसी दिए गए कथन को निष्पादित किया जाता है तो उसका विश्लेषण करना कठिन हो सकता है।

ब्लॉक प्रोग्रामर को बयानों के एक समूह को एक इकाई के रूप में व्यवहार करने की अनुमति देते हैं, और डिफ़ॉल्ट मान जो प्रोग्रामिंग की इस शैली में आरंभीकरण में प्रकट होते हैं, उन्हें ब्लॉक संरचना के साथ, निर्णय के करीब रखा जा सकता है:

<वाक्यविन्यास लैंग = पास्कल>

   {भाषा: जेन्सेन और विर्थ पास्कल}
   यदि मजदूरी> कर_थ्रेशोल्ड तब
       शुरू
       भुगतान कर: = सच;
       कर := (मजदूरी - कर_सीमा) * कर_दर
       {ब्लॉक संरचना यह देखना आसान बनाती है कि कोड कैसे हो सकता है
         स्पष्टता के लिए रिफैक्टर किया जा सकता है, और यह करना भी आसान बनाता है,
         क्योंकि आंतरिक सशर्त की संरचना को आसानी से स्थानांतरित किया जा सकता है
         पूरी तरह से बाहरी सशर्त और करने के प्रभाव से बाहर
         इसलिए आसानी से भविष्यवाणी की जाती है। }
       यदि मजदूरी> सुपरटैक्स_थ्रेशोल्ड है तो शुरू करें
           pays_supertax := सच;
           सुपरटैक्स := (मजदूरी - सुपरटैक्स_थ्रेशोल्ड) * सुपरटैक्स_रेट
       अंत
       वरना शुरू करो
           pay_supertax := झूठा;
           सुपरटैक्स := 0
       अंत
   अंत
   वरना शुरू करो
       भुगतान कर : = असत्य; pay_supertax := झूठा;
       कर := 0; सुपरटैक्स := 0
   अंत;
   कर लगाया गया: = मजदूरी - कर - सुपरटैक्स;

</वाक्यविन्यास हाइलाइट>

पास्कल (प्रोग्रामिंग भाषा) के उपरोक्त खंड में ब्लॉक का उपयोग प्रोग्रामर के इरादे को स्पष्ट करता है, और परिणामी ब्लॉक को सशर्त (कंप्यूटर प्रोग्रामिंग) स्टेटमेंट के नेस्टेड पदानुक्रम में संयोजित करने में सक्षम बनाता है। कोड की संरचना प्रोग्रामर की सोच को अधिक बारीकी से दर्शाती है, जिससे इसे समझना और संशोधित करना आसान हो जाता है।

उपरोक्त स्रोत कोड को और भी स्पष्ट किया जा सकता है यदि आंतरिक कथन को बाहरी एक से पूरी तरह से निकालकर, दो ब्लॉकों को एक के बाद एक लगातार निष्पादित करने के लिए रखा जाए। शब्दार्थ की दृष्टि से इस मामले में थोड़ा अंतर है, और पठनीयता के लिए इंडेंटिंग द्वारा समर्थित ब्लॉक संरचना का उपयोग, प्रोग्रामर के लिए कोड को रिफैक्टर करना आसान बनाता है।

आदिम भाषाओं में, चर का व्यापक दायरा था। उदाहरण के लिए, IEMPNO नामक एक पूर्णांक चर का उपयोग फोरट्रान सबरूटीन के एक भाग में एक कर्मचारी सामाजिक सुरक्षा संख्या (ssn) को दर्शाने के लिए किया जा सकता है, लेकिन उसी सबरूटीन पर रखरखाव कार्य के दौरान, एक प्रोग्रामर गलती से उसी चर, IEMPNO का उपयोग कर सकता है। एक अलग उद्देश्य, और इसका परिणाम एक बग हो सकता है जिसे ट्रेस करना मुश्किल था। ब्लॉक स्ट्रक्चर प्रोग्रामर्स के लिए एक मिनट के स्तर तक स्कोप को नियंत्रित करना आसान बनाता है।

<वाक्यविन्यास लैंग = योजना>

भाषा
R5RS मानक योजना

(चलो ((empno (ssn-of कर्मचारी-नाम)))

 (जबकि (is-manager empno)
   (चलो ((कर्मचारी (लंबाई (अंडरलिंग्स-ऑफ एम्पो))))
     (printf ~a में ~एक कर्मचारी उसके अधीन काम कर रहा है:~% कर्मचारी-नाम कर्मचारी)
     (प्रत्येक के लिए
       (लैम्ब्डा (ईएमपीएनओ)
         ;; इस लैम्ब्डा अभिव्यक्ति के भीतर परिवर्तनीय एम्पो एसएसएन को संदर्भित करता है
         ;; एक अधीनस्थ का। बाहरी अभिव्यक्ति में चर एम्पो,
         ;; मैनेजर के एसएसएन का जिक्र छाया हुआ है।
         (प्रिंटफ नाम: ~ए, भूमिका: ~ए~%
                 (नाम-एम्पनो)
                 (भूमिका-एम्पनो)))
       (अंडरलिंग्स-एम्पनो)))))

</वाक्यविन्यास हाइलाइट>

उपरोक्त योजना (प्रोग्रामिंग लैंग्वेज) के टुकड़े में, एम्पो का उपयोग प्रबंधक और उनके अंडरलिंग दोनों को उनके संबंधित ssn द्वारा पहचानने के लिए किया जाता है, लेकिन क्योंकि अंडरलिंग ssn को एक आंतरिक ब्लॉक के भीतर घोषित किया जाता है, यह उसी नाम के चर के साथ इंटरैक्ट नहीं करता है प्रबंधक का एसएसएन शामिल है। व्यवहार में, स्पष्टता के विचार शायद प्रोग्रामर को अलग-अलग चर नाम चुनने के लिए प्रेरित करेंगे, लेकिन उनके पास विकल्प है और अनजाने में बग को पेश करना अधिक कठिन है।

उत्थापन

कुछ भाषाओं में, एक चर को संलग्न ब्लॉकों के भीतर भी कार्य क्षेत्र में घोषित किया जा सकता है। उदाहरण के लिए, जावास्क्रिप्ट में, घोषित चर var कार्यक्षेत्र है।

यह भी देखें

संदर्भ