Global variable
کمپیوٹر پروگرامنگ میں، ایک عالمی متغیر عالمی دائرہ کار کے ساتھ ایک متغیر ہے، جس کا مطلب ہے کہ یہ پورے پروگرام میں نظر آتا ہے (اس لیے قابل رسائی)، جب تک کہ سایہ نہ ہو۔ تمام عالمی متغیرات کا مجموعہ عالمی ماحول یا عالمی ریاست کے نام سے جانا جاتا ہے۔ مرتب شدہ زبانوں میں، عالمی متغیرات عام طور پر جامد متغیرات ہوتے ہیں، جن کی حد (زندگی بھر) پروگرام کا پورا رن ٹائم ہوتا ہے، حالانکہ تشریح شدہ زبانوں میں (بشمول کمانڈ لائن ترجمان)، عالمی متغیرات عام طور پر متحرک طور پر مختص کیے جاتے ہیں جب اعلان کیا جاتا ہے، کیونکہ وہ وقت سے پہلے معلوم نہیں ہوتے ہیں۔ کچھ زبانوں میں، تمام متغیرات عالمی، یا پہلے سے طے شدہ طور پر عالمی ہوتے ہیں، جبکہ زیادہ تر جدید زبانوں میں متغیرات کا دائرہ محدود ہوتا ہے، عام طور پر لفظی دائرہ کار، حالانکہ عالمی متغیرات اکثر پروگرام کی اعلی سطح پر متغیر کا اعلان کر کے دستیاب ہوتے ہیں۔ دوسری زبانوں میں، تاہم، عالمی متغیرات موجود نہیں ہیں۔ یہ عام طور پر ماڈیولر پروگرامنگ زبانیں ہیں جو ماڈیول ڈھانچے کو نافذ کرتی ہیں، یا کلاس پر مبنی آبجیکٹ پر مبنی پروگرامنگ زبانیں جو کلاس ڈھانچے کو نافذ کرتی ہیں۔ عالمی متغیرات کے ساتھ تعامل کے طریقہ کار کو عالمی ماحول کہا جاتا ہے (عالمی ریاست بھی دیکھیں)۔ عالمی ماحولیاتی نمونہ مقامی ماحولیاتی نمونہ سے متصادم ہے، جہاں تمام متغیرات مقامی ہوتے ہیں جن میں کوئی مشترکہ میموری نہیں ہوتی ہے (اور اس وجہ سے تمام تعاملات کو پیغام منتقل کرنے کے لیے دوبارہ ترتیب دیا جا سکتا ہے)۔ گلوبل متغیرات کو بڑے پیمانے پر کوڈ کے ان حصوں کے درمیان معلومات منتقل کرنے کے لیے استعمال کیا جاتا ہے جو کالر/کیلی کے تعلق کا اشتراک نہیں کرتے ہیں جیسے کہ ہم آہنگی تھریڈز اور سگنل ہینڈلرز۔ زبانیں (بشمول C) جہاں ہر فائل ایک مضمر نیم اسپیس کی وضاحت کرتی ہے وہ عالمی نیم اسپیس والی زبانوں کے ساتھ نظر آنے والے زیادہ تر مسائل کو ختم کرتی ہے حالانکہ کچھ مسائل مناسب انکپسلیشن کے بغیر برقرار رہ سکتے ہیں۔ مناسب لاکنگ کے بغیر (جیسے کہ میوٹیکس کے ساتھ)، عالمی متغیرات کا استعمال کرنے والا کوڈ تھریڈ سیف نہیں ہوگا سوائے محفوظ میموری میں صرف پڑھنے والی اقدار کے۔ ماحولیاتی متغیرات کچھ آپریٹنگ سسٹمز کے ذریعہ فراہم کردہ سہولت ہیں۔ او ایس کے خول کے اندر (یونیکس میں کے ایس ایچ، لینکس میں بیش، ڈی او ایس میں COMMAND.COM اور ونڈوز میں CMD.EXE) وہ ایک قسم کے متغیر ہیں: مثال کے طور پر، یونیکس اور متعلقہ سسٹمز میں ایک عام متغیر ماحولیاتی متغیر بن جاتا ہے جب ایکسپورٹ مطلوبہ لفظ استعمال کیا جاتا ہے۔ شیلز کے علاوہ پروگرام کوڈ کو اے پی آئی کالز کے ذریعے ان تک رسائی حاصل کرنی ہوتی ہے، جیسے کہ گیٹ این وی () اور سیٹ این وی ()۔ وہ اس عمل کے لیے مقامی ہیں جس میں انہیں ترتیب دیا گیا تھا۔ اس کا مطلب یہ ہے کہ اگر ہم دو ٹرمینل ونڈوز (دو مختلف عمل چل رہے شیل) کھولتے ہیں اور ایک ونڈو میں ماحولیاتی متغیر کی قدر تبدیل کرتے ہیں، تو وہ تبدیلی دوسری ونڈو کو نظر نہیں آئے گی۔ جب چائلڈ پروسیس بنایا جاتا ہے، تو یہ تمام ماحولیاتی متغیرات اور ان کی اقدار کو پیرنٹ پروسیس سے وراثت میں حاصل کرتا ہے۔ عام طور پر، جب کوئی پروگرام دوسرے پروگرام کو کال کرتا ہے، تو یہ پہلے فورکنگ کے ذریعے چائلڈ پروسیس بناتا ہے، پھر بچہ ضرورت کے مطابق ماحول کو ایڈجسٹ کرتا ہے اور آخر میں بچہ خود کو کال کیے جانے والے پروگرام سے بدل دیتا ہے۔ لہذا بچوں کے عمل اپنے ساتھیوں کے ساتھ بات چیت کرنے کے لیے ماحولیاتی متغیرات کا استعمال نہیں کر سکتے، فاصلے کے مسئلے پر عمل سے گریز کرتے ہیں۔ متعدد غیر ساختہ زبانیں، جیسے بنیادی، کوبول اور فورٹرن I (1956) صرف عالمی متغیرات فراہم کرتی ہیں۔ فورٹرن II (1958) نے مقامی متغیرات کے ساتھ سبروٹینز، اور عالمی متغیرات تک رسائی کے لیے عام کلیدی لفظ متعارف کرایا۔ فورٹرن میں کامن کا استعمال فورٹرن 77 میں جاری رہا، اور اس نے بعد کی زبانوں جیسے پی ایل/ایس کیو ایل کو متاثر کیا۔ گلوبلوں کے لیے نامزد کامن گروپ کسی حد تک منظم نیم اسپیس کی طرح برتاؤ کرتے ہیں۔ متغیرات فورتھ، لوا، پرل اور زیادہ تر شیلز میں ڈیفالٹ کے طور پر عالمی بھی ہیں۔ زبان سی اور سی + + کے لحاظ سے سی زبان میں عالمی کلیدی لفظ نہیں ہے۔ تاہم، کسی فنکشن سے باہر اعلان کردہ متغیرات میں "فائل کا دائرہ" ہوتا ہے، جس کا مطلب ہے کہ وہ فائل کے اندر نظر آتے ہیں۔ فائل کے دائرہ کار کے ساتھ اعلان کردہ متغیرات ان کے اعلامیے اور تالیف یونٹ (. c فائل) کے اختتام کے درمیان نظر آتے ہیں (جب تک کہ قریب ترین دائرہ کار میں ایک جیسی نام والی شے کا سایہ نہ ہو، جیسے کہ مقامی متغیر) ؛ اور ان میں مضمر طور پر بیرونی ربط ہوتا ہے اور اس طرح وہ نہ صرف. c فائل یا تالیف یونٹ کو نظر آتے ہیں جس میں ان کے بیانات ہوتے ہیں بلکہ ہر دوسرے تالیف یونٹ کو بھی جو مکمل پروگرام بنانے کے لیے منسلک ہوتا ہے۔ تاہم، بیرونی ربط دیگر فائلوں میں اس طرح کے متغیر کے استعمال کے لیے کافی نہیں ہے: ایک تالیف یونٹ کے لیے اس طرح کے عالمی متغیر تک صحیح طریقے سے رسائی حاصل کرنے کے لیے، اسے اس کی قسم جاننے کی ضرورت ہوگی۔ یہ بیرونی مطلوبہ الفاظ کا استعمال کرتے ہوئے ہر فائل میں متغیر کا اعلان کرکے پورا کیا جاتا ہے۔ (اس کا اعلان ہر فائل میں کیا جائے گا لیکن اس کی وضاحت صرف ایک میں کی جا سکتی ہے۔) اس طرح کے بیرونی اعلامیے اکثر مشترکہ ہیڈر فائل میں رکھے جاتے ہیں، کیونکہ کسی پروجیکٹ میں تمام. c فائلوں کے لیے کم از کم ایک. h فائل شامل کرنا عام عمل ہے: معیاری ہیڈر فائل errno.h ایک مثال ہے، جس سے ایرنو متغیر کو پروجیکٹ کے تمام ماڈیولز تک رسائی حاصل ہوتی ہے۔ جہاں اس عالمی رسائی کے طریقہ کار کو پریشانی کا باعث سمجھا جاتا ہے، اسے جامد مطلوبہ الفاظ کا استعمال کرتے ہوئے غیر فعال کیا جا سکتا ہے جو ایک متغیر کو فائل کے دائرہ کار تک محدود کرتا ہے، اور تالیف (یا لنک کرنے) کی غلطی کو بڑھانے کے لیے اسے بیرونی کے ساتھ درآمد کرنے کی کوششوں کا سبب بنتا ہے۔ C میں "گلوبل" متغیر کی ایک مثال: #include <stdio.h>// یہ فائل کا دائرہ متغیر ہے (اندرونی ربط کے ساتھ)، جو صرف// اس تالیف اکائی میں نظر آتا ہے۔ جامد int مشترکہ = 3 ؛// اس میں بیرونی ربط ہے (اس تالیف اکائی تک محدود نہیں)۔ extern int اوور _ شیئرڈ ؛// نیز اندرونی ربط۔ int اوور _ شیئرڈ _ ٹو = 2 ؛ جامد کالعدم تبدیلی شیئرڈ () {// کسی فنکشن میں فائل-دائرہ متغیر کا حوالہ۔ شیئرڈ = 5 ؛} جامد کالعدم لوکل شیڈو () {// مقامی متغیر جو اسی نام کے گلوبل کو چھپائے گا۔ یہ صرف مقامی متغیر کو متاثر کرے گا اور اسی نام کے// فائل-دائرہ متغیر پر اس کا کوئی اثر نہیں پڑے گا۔ شیئرڈ = 1000 ؛} جامد وایڈ پرمشاڈو (int شیئرڈ) {// یہ صرف پیرامیٹر کو متاثر کرے گا اور اسی نام کی فائل-//اسکوپ متغیر پر اس کا کوئی اثر نہیں پڑے گا۔ شیئرڈ =-شیئرڈ ؛} انٹ مین () {// فائل-اسکوپ متغیر کا حوالہ۔ پرنٹ ایف ("% d\n"، شیئرڈ) ؛ چینج شیئرڈ () ؛ پرنٹ ایف ("% d\n"، شیئرڈ) ؛ لوکل شیڈو () ؛ پرنٹ ایف ("% d\n"، شیئرڈ) ؛ پرم شیڈو (1) ؛ پرنٹ ایف ("% d\n"، شیئرڈ) ؛ ریٹرن 0 ؛} چونکہ متغیر ایک بیرونی ہے، اس لیے اسے مین کے علاوہ کسی فنکشن میں استعمال کرنے کے لیے بطور پیرامیٹر پاس کرنے کی ضرورت نہیں ہے۔ یہ ماڈیول کے ہر فنکشن سے تعلق رکھتا ہے۔ آؤٹ پٹ یہ ہوگا: 3 5 5 5 جاوا کچھ زبانیں، جیسے جاوا، میں عالمی متغیرات نہیں ہیں۔ جاوا میں، وہ تمام متغیر جو مقامی متغیر نہیں ہیں، کلاس کے فیلڈز ہوتے ہیں۔ لہذا تمام متغیرات کلاس یا طریقہ کار کے دائرہ کار میں ہیں۔ جاوا میں، جامد فیلڈز (جسے کلاس متغیر بھی کہا جاتا ہے) کلاس کی کسی بھی مثال سے آزادانہ طور پر موجود ہیں اور ایک کاپی تمام مثالوں کے درمیان شیئر کی جاتی ہے۔ اس لیے عوامی جامد فیلڈز کو ان کے اسی طرح کے "شیئرنگ" رویے کی وجہ سے دوسری زبانوں میں عالمی متغیرات جیسے بہت سے مقاصد کے لیے استعمال کیا جاتا ہے: پبلک کلاس گلوبل (پبلک جامد انٹ اے ؛) پی ایچ پی میں ایک عالمی مطلوبہ الفاظ اور عالمی متغیرات کو استعمال کرنے کے متعدد غیر معمولی طریقے ہیں۔ افعال سے باہر اعلان کردہ متغیرات میں فائل کا دائرہ کار ہوتا ہے (جو زیادہ تر مقاصد کے لیے وسیع تر دائرہ کار ہے)۔ تاہم، وہ افعال کے اندر قابل رسائی نہیں ہیں جب تک کہ عالمی مطلوبہ الفاظ کے ساتھ درآمد نہ کیا جائے (یعنی، مطلوبہ الفاظ عالمی متغیرات تک رسائی حاصل کرتا ہے، یہ ان کا اعلان نہیں کرتا ہے)۔ تاہم، کچھ پہلے سے طے شدہ متغیرات، جنہیں سپر گلوبلز کہا جاتا ہے، ہمیشہ قابل رسائی ہوتے ہیں۔ وہ سب صف ہیں۔ ایک عام مقصد $GLOBALS سپر گلوبل ہے، جس میں فنکشن کے دائرہ کار سے باہر بیان کردہ تمام متغیرات شامل ہیں۔ اس کے عناصر میں تبدیلیاں اصل متغیرات کو تبدیل کرتی ہیں، اور اضافے سے نئے متغیرات پیدا ہوتے ہیں۔ سپر گلوبلز $_ POST اور $_ GET ویب پروگرامنگ میں بڑے پیمانے پر استعمال ہوتے ہیں۔ دیگر زبانیں ازگر اور میٹ لیب میں ایک عالمی متغیر کو عالمی مطلوبہ الفاظ کے ساتھ کہیں بھی قرار دیا جا سکتا ہے۔ روبی کے عالمی متغیرات کو '$' سگیل سے ممتاز کیا جاتا ہے۔ متعدد پہلے سے طے شدہ گلوبل موجود ہیں، مثال کے طور پر $$موجودہ عمل ID ہے۔ مقامی متغیر غیر مقامی متغیر سنگلٹن پیٹرن متغیرات جامد متغیر بیرونی متغیر حوالہ جات متغیر (کمپیوٹر سائنس) ڈی: متغیر (پروگرامنگ) #Variablen ایینر بلاک اسٹرکچر میں دیکھیں۔