ازگر میں حوالہ بمقابلہ قدر سے گزریں۔

Pass Reference Vs



ازگر کو جاننے کے بعد ، آپ ایسی مثالیں ڈھونڈ سکتے ہیں جہاں افعال دلائل کو کسی جگہ پر تبدیل نہیں کرتے جیسا کہ آپ توقع کریں گے ، خاص طور پر اگر آپ کئی دوسری کمپیوٹر زبانوں سے واقف ہیں۔ بہت سی زبانیں طریقہ کار کے دلائل کو بطور حوالہ استعمال کرتی ہیں ، جس کی تعریف موجودہ متغیرات کے حوالہ سے گزرنا ہے۔ اگر آپ ایک اعلی درجے کے ازگر ڈویلپر ہیں جو طریقہ کار کے دلائل کے علاج کے لیے ازگر کے مخصوص طریقے کو سمجھنا چاہتے ہیں تو یہ گائیڈ واقعی آپ کے لیے ہے۔

ازگر آبجیکٹ ریفرنس کے ذریعے پاس کی حمایت کرتا ہے۔

پاس بائی ریفرنس اور پاس بائی ویلیو بلاشبہ پروگرامنگ زبانوں کے درمیان گزرنے کے پیرامیٹرز کے دو سب سے زیادہ تسلیم شدہ اور آسانی سے قابل فہم طریقے ہیں۔ ازگر ، بدقسمتی سے ، 'پاس بائی آبجیکٹ ریفرنس' ہے ، نہ تو پاس بائی ویلیو اور نہ ہی پاس بذریعہ حوالہ ، جسے اکثر کال بائی آبجیکٹ ریفرنس کے ساتھ ساتھ کال بائی شیئرنگ کہا جاتا ہے۔ جب آپ حوالہ سے گزرنے کی تکنیکی خصوصیات میں ڈوب جاتے ہیں تو اس کو تصورات پر زیادہ قریب سے دیکھنا مفید ہے۔







پاس: اس کا مطلب دلیل کے ساتھ ایک طریقہ فراہم کرنا ہے۔



حوالہ سے: اس کا مطلب یہ ہے کہ آپ اس طریقہ کار کی طرف جو دلیل پیش کرتے ہیں اس سے مراد ایک متغیر ہے جو اب اس متغیر کی مختلف نقل کی بجائے اسٹوریج میں رہتا ہے۔



جیسا کہ آپ طریقہ کار کو ایک متعین متغیر کا حوالہ تفویض کرتے ہیں ، اس سے مطابقت رکھنے والا متغیر واضح طور پر اس حوالہ کی تمام کارروائیوں سے متاثر ہوگا۔ اب آئیے ایک مثال پر غور کریں کہ عملی طور پر یہ کیسے کام کرتا ہے۔ اس مثال میں ، ہم نے ایک متغیر کی وضاحت کی ہے ' ناراض ' کی ایک قدر ہے . اس پورے منظر نامے میں ، متغیر ' ناراض ' اس کی جگہ میں ترمیم نہیں کی گئی۔ ازگر آپ کی فراہم کردہ دلیل کو موجودہ متغیر کے حوالہ کی بجائے خود ساختہ قیمت کے طور پر سنبھالتا ہے۔





کیا اس کا مطلب یہ ہوگا کہ حوالہ کے بجائے ، ازگر دلیلوں کو قدر کے مطابق منتقل کرتا ہے؟ ازگر تفویض کے ذریعے دلائل کو آگے بڑھاتا ہے ، لہذا نہ تو حوالہ سے اور نہ ہی قیمت کے ساتھ۔ اس کی منطق دو گنا ہے:



فی الحال ، گزرنے والا پیرامیٹر کسی شے کا اشارہ ہے۔ کچھ قسم کے ڈیٹا متغیر ہیں ، اور کچھ متغیر نہیں ہیں۔

اگر ہم کسی تغیر پزیر شے کو کسی فنکشن میں منتقل کرتے ہیں تو فنکشن اسی چیز کا حوالہ حاصل کرتا ہے تاکہ آپ اپنی روح کی تسکین کے لیے ان سب کو تبدیل کر سکیں۔ تاہم ، فنکشن میں ریفرنس میں دوبارہ شامل ہونے سے پہلے بیرونی دائرہ کار کچھ نہیں جانتا۔ ایک بار جب آپ فارغ ہوجائیں تو ، بیرونی حوالہ صرف اصل چیز کو نشانہ بنائے گا۔ اگر آپ کسی غیر منقولہ چیز کو کسی فنکشن میں منتقل کرتے ہیں تو بیرونی حوالہ ہمیشہ دوبارہ بند نہیں ہو سکتا ، اور آپ صرف اس چیز کو تبدیل نہیں کر سکتے۔ چیزوں کو زیادہ سیدھا کرنے کے لیے ، آئیے ایک ایک کرکے سمجھیں۔

حوالہ سے گزریں۔

سب سے پہلے ، آپ کو یہ سمجھنا ہوگا کہ متغیر 'mylist' خود ایک فہرست نہیں ہے بلکہ اس فہرست سے مراد ہے جس کی اقدار ہیں۔ آپ متغیر 'mylist' کو ایک کنٹینر کہہ سکتے ہیں جس میں اقدار ہوں۔ فہرست اقدار اشیاء ہیں۔ 'mylist' متغیر کو براہ راست اس کے مندرجات کے ساتھ فنکشن میں پہنچا دیا گیا ہے۔

دونوں فہرست اور میری فہرست نیچے کوڈ مثال میں ایک ہی اسٹوریج متغیر معلوم ہوتی ہے اور اس طرح ایک ہی اسٹوریج آبجیکٹ پر لاگو ہوتی ہے۔ یہی وجہ ہے کہ آؤٹ پٹ پر یہ ’سعید‘ پرنٹ کرتا ہے۔

متغیر یا ہستی پر کی جانے والی کوئی بھی کارروائی فوری طور پر کال کرنے والے کے طریقہ کار کی عکسبندی ہوگی۔ یہ طریقہ متغیر کی قدر کو مکمل طور پر تبدیل کر سکتا ہے اور اس کا مقصد مکمل طور پر الگ چیز پر ہے۔ جیسا کہ آپ فنکشن 'سیٹ_ لسٹ' میں دیکھ سکتے ہیں ، ہم نے فہرست کے مندرجات کو تبدیل کر دیا ہے اور ایک نئی نئی فہرست پرنٹ کی ہے جس میں عنصر 'اقصی' ہے۔ اس کی وجہ یہ ہے کہ ہم نے نظر ثانی شدہ فہرست واپس کر دی ہے اور اسے کال کرنے والے کی لائن پر پرنٹ کیا ہے۔

یہ طریقہ متغیر کے عناصر کو اسی نتائج کے لیے دوبارہ ترتیب دے سکتا ہے جیسا کہ ذیل میں ہے۔ آپ دیکھ سکتے ہیں کہ ہم نے فہرست میں ایک نئی قیمت شامل کی ہے ، اور تبدیلی ظاہر ہوئی ہے۔ ہم نے ایک منفرد سٹرنگ کو فہرست میں شامل کیا ہے اور اسے کال کرنے والے کو واپس کر دیا ہے۔ نتیجہ اخذ کرنے کے لیے ، طریقہ کار اور کال کرنے والے ایک ہی متغیر اور چیز کو استعمال کرتے رہے ہیں۔

ویلیو سے گزریں۔

پاس بائی ویلیو کے ذریعے ، طریقہ کار کو دلیل دلیل کی ڈپلیکیٹ فراہم کی جاتی ہے جسے کال کرنے والا اسے تفویض کرتا ہے۔ اس بات کو یقینی بناتا ہے کہ اصل آئٹم میں کوئی تبدیلی نہیں کی گئی اور تمام تر ترمیمیں ایک ہی چیز کی نقل میں میموری کے الگ الگ مقامات پر برقرار ہیں۔

یہ متغیر یا ہستی پر طریقہ کار کے ذریعے انجام دی گئی کسی بھی کارروائی کے ساتھ یکساں طور پر درست ہے۔ کالر کے طریقہ کار کے دائرہ کار میں متغیرات اور اشیاء کی نقلیں ان کا خلاصہ کرنے کے لیے مکمل طور پر الگ ہیں۔

حوالہ سے اعتراض پاس کریں۔

اس ساری صورتحال میں ، چونکہ ازگر الگ ہے ، ازگر کے طریقے اسٹوریج میں اسی طرح کے آبجیکٹ کا حوالہ حاصل کرتے ہیں جیسا کہ کالر کا حوالہ دیا جاتا ہے۔ اس کے برعکس ، تکنیک متغیر 'mylist' (کنٹینر) حاصل نہیں کرتی ہے۔ کالر کا طریقہ ایک ہی چیز کو محفوظ کرتا ہے۔ یہ طریقہ کسی کا کنٹینر تیار کرتا ہے اور اپنے طور پر بالکل تازہ انڈیکس تیار کرتا ہے ، جیسا کہ پاس بائی ویلیو۔

کال کرنے والا اور طریقہ اسٹوریج میں ایک ہی شے کے بارے میں بات کرتا ہے ، لیکن جب ضم شدہ طریقہ کسی بیرونی شے کو کسی فہرست میں لاگو کرتا ہے تو ، کال کرنے والی ہستی میں ترمیم کی جاتی ہے۔ ان کے پاس متعدد لیبل ہیں ، لیکن وہ ایک جیسی چیزیں ہیں۔ دونوں متغیرات ایک جیسی چیز رکھتے ہیں۔ یہ اس چیز کا پیچھے سے احساس ہے جو چیز کے حرکت میں ہے۔ اسٹوریج میں ، طریقہ کار اور کالر ایک جیسی چیز استعمال کرتے ہیں پھر بھی انہیں متعدد متغیرات کے ذریعے پکڑتے ہیں۔ کالر متغیر (کنٹینر) کو طریقہ متغیر (کنٹینر) میں کی گئی کسی بھی ترمیم سے تبدیل نہیں کیا جائے گا۔ صرف ڈیٹا یا مواد میں ترمیم کی جاتی ہے۔

نتیجہ

ازگر ان زبانوں سے آزادانہ طور پر کام کرتا ہے جو حوالہ یا دلائل کی قدر سے حرکت کو قبول کرتی ہیں۔ طریقہ دلائل مقامی متغیر ہیں جو طریقہ کار میں منتقل ہونے والی ہر قدر کے لیے مختص کیے گئے ہیں۔ لیکن یہ اب بھی آپ کو وہی نتائج حاصل کرنے سے نہیں روکتا جو آپ کو پراکسی کے ذریعے دلائل منتقل کرتے ہوئے دوسری زبانوں میں ملیں گے۔