Search

1.4c — Local scope पर एक नज़र

Lesson 1.3 -- Variables, initialization, और assignment पर एक नज़र में आपने पहले ही देखा है की जब CPU कोई statement जैसे int x; को execute करता है, तब define किया गया variable instantiate हो जाता है, अर्थात इसके लिए memory में जगह बना ली जाती है ।

तो ज़ाहिर सा सवाल है की, “यदि ऐसा है, तो instantiated (created) variable नष्ट (destroy) कब होता है?”

किसी variable का scope ये निर्धारित करता है की variable के instantiate होने के बाद उसे कौन देख सकता है या उसका इस्तेमाल कौन कर सकता है । Function parameters और varibles जो function के अन्दर define किये जाते हैं, उनका local scope होता है । अर्थात वे केवल उसी function में देखे या इस्तेमाल किये जा सकते हैं जिसमे इन्हें define किया गया हो । Local variables function के शुरू होते ही बना लिए जाते हैं और इसके (function के) ख़त्म होने पर नष्ट हो जाते हैं ।

इस program पर नज़र डालें:

Function add() में, parameters x और y function के call होते ही बना लिए जाते हैं । इन्हें केवल function add() के अन्दर ही देखा/ इस्तेमाल किया जा सकता है और जैसे ही add() ख़त्म होता है, ये variables नष्ट हो जाते है ।
Variables a और b main() में बनाये जाते हैं । इन्हें केवल function main() के अन्दर ही देखा/ इस्तेमाल किया जा सकता है और जैसे ही main() ख़त्म होता है, ये variables भी नष्ट हो जाते है ।

और अच्छी तरह से समझने के लिए, आइये इस program को ज़रा नज़दीक से देखते हैं । यहाँ, एक-एक करके ये सारी चीजें हो रही हैं:

  • main() का execution शुरू हुआ
  • main में variable a बनाया गया और इसे value 5 assign किया गया
  • main में variable b बनाया गया और इसे value 6 assign किया गया
  • Function add() को parameters 5 और 6 के साथ call किया गया
  • add में variable x बनाया गया और इसे value 5 assign किया गया
  • add में variable y बनाया गया और इसे value 6 assign किया गया
  • operator + की सहायता से 5 और 6 को जोड़ा गया, इन्हे जोड़ने पर value 11 प्राप्त हुआ
  • add ने caller (main) को value (11) return किया
  • add के x और y नष्ट हो गएँ
  • main function ने आगे execute होते हुए console पर 11 print किया
  • main ने operating system को value 0 return किया
  • main के a और b नष्ट हो गएँ

और इस तरह हमारा program ख़त्म हुआ ।

ध्यान दे की यदि function add() को दो बार call किया जाता तो parameters x और y भी दो बार बनाये और नष्ट किये जाते -- हर call के लिए एक-एक बार । बहुत सारे functions से बने programs में variables कई बार बनाये और नष्ट किये जाते हैं ।

Local scope naming collision से बचाता है

Naming collision या Naming conflict: जब दो या दो से अधिक variables, classes, structs, enums आदि को एक ही नाम के साथ एक ही scope में define किया जाता है, तो इस घटना को naming collision या naming conflict कहा जाता है । ध्यान दे की naming collision या naming conflict किसी function के definition में भी संभव है, पर function overloading (जिसके बारे आगे के एक chapter में चर्चा की जाएगी) की सहायता से आप एक ही नाम के दो functions एक ही scope में आसानी से define कर सकते हैं । Naming conflicts या naming collision के case में compiler हमे error देता है ।

ऊपर दिए गए example में, आसानी से पता चल रहा है की variables a और b, variables x और y से अलग हैं ।

अब ज़रा इसपर नज़र डाले:

इस example में, हमने बस main में declare किये गए variables का नाम a और b से बदलकर x और y कर दिया है । ये program अब भी बिना किसी परेशानी के compile हो जायेगा, जबकि इसमें add() और main(), दोनों के variables के नाम बिलकुल एक जैसे हैं (x और y) । अब ज़रा सोचिये, यहाँ कोई naming collision क्यूँ नहीं हुआ? क्यूंकि main के x और y local scope में आते है, add() इन्हें (main के x और y को) नहीं देख सकता । उसी तरह add() के x और y का भी local scope है, जहां main() इन्हें नहीं देख सकता । बेहतर तरीके से समझाया जाये, तो main() और add() में से किसी को भी नहीं पता की किसी दुसरे function में variables के नाम, उनके variables के नाम से मिलते-जुलते हैं!

ये हमें naming conflicts से बचाता है, क्यूंकि किसी function को इस बात की चिंता करने की ज़रूरत नहीं की दुसरे functions में किन नामो का प्रयोग किया गया है । ये किसी दुसरे function के variables के value को गलती से या सोच-समझकर बदले जाने से भी बचाता है ।

हम chapter 4 में local scope और दुसरे तरह के scopes के बारे में और अधिक चर्चा करेंगे

Rule: वे नाम जिनका इस्तेमाल function के अंदर या function के parameter के रूप में किया गया हो, वे केवल उसी function तक सीमित होते हैं । वे किसी दुसरे function पर कोई प्रभाव नहीं डाल सकते ।

Quiz

1) ये program क्या print करेगा?

Quiz answers

1) Show Solution

1.4d -- Keywords और naming identifiers
Index
1.4b -- Functions क्यूँ उपयोगी हैं और उनका सबसे बेहतर प्रयोग कैसे किया जाये

Leave a Comment

Put C++ code inside [code][/code] tags to use the syntax highlighter