JavaRush /جاوا بلاگ /Random-UR /جاوا میں پیرامیٹرز پاس کرنا
vincent_vega
سطح
Gainesville

جاوا میں پیرامیٹرز پاس کرنا

گروپ میں شائع ہوا۔
جاوا میں ایک متغیر ایک کنٹینر ہے جس میں ایک قدر ہے۔ تو متغیر کو "پاس" کرنے کا کیا مطلب ہے؟ اور قدیم اور حوالہ ڈیٹا کی اقسام میں کیا فرق ہے۔
جاوا میں پیرامیٹرز پاس کرنا - 1
ہم اس پر بعد میں پہنچیں گے۔ آئیے پہلے ایک سادہ تفویض کے ساتھ شروع کریں۔ یہ کوڈ کیا کرتا ہے:
int х = 3;
int у = х;
لائن 1 پر، قسم int کا ایک متغیر x بنایا جاتا ہے اور اس کی قدر 3 تفویض کی جاتی ہے۔ لائن 2 پر، قسم int کا ایک متغیر y بنایا جاتا ہے اور متغیر x کی قدر تفویض کی جاتی ہے ۔ مستقبل میں، متغیر x کسی بھی طرح y کو متاثر نہیں کرتا ہے ۔ جاوا x (3) کی قدر کو کاپی کرتا ہے اور وہ جگہیں جو y میں کاپی کرتی ہیں ۔ یہ قدر کے لحاظ سے ایک پیرامیٹر کو منتقل کر رہا ہے۔ آپ ایک متغیر کو دوسرے پر نہیں لکھتے ہیں۔ قدر کو کاپی کرکے ایک نئے متغیر کو تفویض کیا جاتا ہے۔ اظہار y = x; اس کا مطلب یہ نہیں ہے کہ " x کو y لکھیں "۔ اس کا مطلب ہے " ایکس کے اندر کی قدر کو کاپی کریں اور اس کاپی کو y پر لکھیں ۔" اگر بعد میں میں y کو تبدیل کرتا ہوں :
у = 34;
کیا یہ ایکس کو متاثر کرے گا ؟ ہرگز نہیں۔ x کی اب بھی قدر 3 ہے۔ اگر میں بعد میں x کو تبدیل کرتا ہوں :
х = 90;
یہ آپ کو کیسے متاثر کرے گا ؟ ہرگز نہیں. تفویض کیے جانے کے بعد ان کا کسی بھی طرح سے کوئی تعلق نہیں ہے (قدر کو کاپی کرنا)۔ حوالہ کی اقسام کے بارے میں کیا خیال ہے؟ وہ کیسے کام کرتے ہیں؟ اتنا مشکل نہیں، اصل میں اصول وہی ہے۔ لنک ایک ہی کام کرتے ہیں - آپ کو لنک کی ایک کاپی ملتی ہے۔ تو اگر میں کہوں:
Cat A = new Cat ();
Cat B = A;
لنک A کو لنک B میں کاپی کیا جاتا ہے۔ یہ اعتراض پر لاگو نہیں ہوتا ہے - آپ کے پاس اب بھی صرف ایک چیز ہے۔ لیکن اب آپ کے پاس ایک ہی Cat آبجیکٹ کو کنٹرول کرنے والے دو مختلف حوالہ جات ہیں ۔ اب آئیے طریقوں کو پیرامیٹرز منتقل کرنے پر غور کریں۔ جاوا قدر کے لحاظ سے پیرامیٹرز کو پاس کرتا ہے۔ ہمیشہ اس کا مطلب ہے "قدر کاپی کریں اور کاپی پاس کریں۔" قدیم اقسام کے لیے یہ آسان ہے:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
doStuff طریقہ اس طرح لگتا ہے:
void doStuff (int у) {

   / / Действия с 'y'
}
x کی قدر کی ایک کاپی ، یعنی 5، doStuff() طریقہ کو منتقل کی جاتی ہے ۔ doStuff() طریقہ کا اپنا متغیر ہے جسے y کہا جاتا ہے ۔ y متغیر ایک نیا، مختلف متغیر ہے۔ اس کی ایک کاپی کے ساتھ جو اسے طریقہ میں منتقل کرنے کے وقت x میں تھا۔ اب سے، y اور x کا ایک دوسرے پر کوئی اثر نہیں ہوگا۔ جب آپ y کو تبدیل کرتے ہیں، تو آپ x کو متاثر نہیں کرتے ہیں ۔
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
اور اس کے برعکس - اگر آپ x کو تبدیل کرتے ہیں تو آپ y کو تبدیل نہیں کریں گے ۔ اس معاملے میں صرف ایک ہی چیز x نے کی تھی اس کی قدر کو کاپی کرنا اور اسے منتقل کرنا doStuff() طریقہ ۔ حوالوں کے ساتھ "قدر سے گزرنا" کیسے کام کرتا ہے؟ بہت سارے لوگ کہتے ہیں، "جاوا قدیم اقسام کو قدر کے لحاظ سے اور اشیاء کو حوالہ کے لحاظ سے پاس کرتا ہے۔" یہ وہ نہیں جو وہ کہتے ہیں۔ جاوا ہر چیز کو قدر کے لحاظ سے پاس کرتا ہے۔ قدیم کے ساتھ، آپ کو مواد کی ایک کاپی ملتی ہے۔ لنکس کے ساتھ آپ کو مواد کی ایک کاپی بھی ملتی ہے۔ لیکن لنک کا مواد کیا ہے؟ ریموٹ کنٹرول. سہولت کے انتظام / رسائی کے لیے سہولیات۔ جب آپ کسی شے کا حوالہ کسی طریقہ پر پاس کرتے ہیں، تو آپ حوالہ کی ایک کاپی پاس کر رہے ہوتے ہیں۔ ریموٹ کنٹرول کلون۔ شے اب بھی اس ڈھیر میں بیٹھی ہے جہاں اسے بنایا گیا تھا، کسی کے ریموٹ کنٹرول کے استعمال کے انتظار میں۔ اس سہولت کو اس بات کی پرواہ نہیں ہے کہ اسے کنٹرول کرنے کے لیے کتنے ریموٹ "پروگرام" کیے گئے ہیں۔ صرف وہی لوگ جو اس کی پرواہ کرتے ہیں وہ ہیں کوڑا اٹھانے والے اور آپ، پروگرامر۔ تو جب آپ کہتے ہیں:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
صرف ایک بلی چیز ہے ۔ لیکن اب دو ریموٹ کنٹرول (لنک) ایک ہی Cat آبجیکٹ تک رسائی حاصل کر سکتے ہیں ۔ لہٰذا اب جو بھی B Cat آبجیکٹ کے ساتھ کرتا ہے وہ A کی طرف اشارہ کردہ Cat کو متاثر کرے گا ، لیکن یہ A کے مواد کو متاثر نہیں کرے گا ! آپ نئے لنک B کا استعمال کرتے ہوئے کیٹ کو تبدیل کر سکتے ہیں (براہ راست A سے کاپی کیا گیا ہے )، لیکن آپ A کو تبدیل نہیں کر سکتے۔ اس کا کیا مطلب ہے؟ آپ اس آبجیکٹ کو تبدیل کر سکتے ہیں جس کا حوالہ A سے ہے ، لیکن آپ A کا حوالہ تبدیل نہیں کر سکتے ہیں - اسے کسی اور چیز یا null پر بھیج سکتے ہیں ۔ لہذا اگر آپ B کا حوالہ تبدیل کرتے ہیں (اصلی کیٹ آبجیکٹ نہیں جس کا B حوالہ دیتا ہے ، بلکہ خود حوالہ کی قدر) آپ A کی قدر کو تبدیل نہیں کریں گے ۔ اور اس کے برعکس۔ تو:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
اس کا سیدھا مطلب ہے کہ B کسی اور چیز کی طرف اشارہ کرتا ہے۔ اے اب بھی خوش ہے۔ تو میرے بعد دہرائیں: جاوا ہر چیز کو قدر سے گزرتا ہے۔ (ٹھیک ہے، ایک بار پھر... احساس کے ساتھ۔) جاوا ہر چیز کو قدر کے لحاظ سے پاس کرتا ہے۔ قدیم اقسام کے لیے آپ موجودہ قدر کی ایک کاپی پاس کرتے ہیں، آبجیکٹ کے حوالہ جات کے لیے آپ حوالہ (ریموٹ کنٹرول) کی ایک کاپی پاس کرتے ہیں۔ آپ کبھی بھی اعتراض کو پاس نہیں کرتے ہیں۔ تمام اشیاء ڈھیر پر محفوظ ہیں۔ ہمیشہ اب کافی کا ایک موٹا کپ بنائیں اور کچھ کوڈ لکھیں! اصل آرٹیکل.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION