JavaRush /جاوا بلاگ /Random-UR /صفر کی لمبائی والی صف واپس کریں، null نہیں۔
alexnjc
سطح

صفر کی لمبائی والی صف واپس کریں، null نہیں۔

گروپ میں شائع ہوا۔
اکثر ایسے طریقے ہیں جو اس طرح نظر آتے ہیں:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* or null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
ایسی صورت حال کو خصوصی کیس کے طور پر علاج کرنے کی کوئی وجہ نہیں ہے جہاں کوئی پنیر فروخت نہ ہو۔ اس کے لیے کلائنٹ کو طریقہ کی واپسی کی قیمت پر کارروائی کرنے کے لیے اضافی کوڈ لکھنے کی ضرورت ہوتی ہے пull، مثال کے طور پر:
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
سادہ کے بجائے:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
اس قسم کی فعلیت تقریباً ہر میتھڈ کال کے لیے ضروری ہے جو صفر کی لمبائی والی صف کی بجائے null لوٹاتی ہے۔ یہ غلطیوں سے بھرا ہوا ہے، کیونکہ کلائنٹ کے ڈویلپر نے نتیجہ پر کارروائی کرنے کے لیے خاص کوڈ نہیں لکھا ہو گا null۔ غلطی کا سالوں تک پتہ نہیں چل سکتا ہے کیونکہ اس طرح کے طریقے عام طور پر ایک یا زیادہ اشیاء کو واپس کرتے ہیں۔ یہ بھی ذکر کیا جانا چاہئے کہ nullصف کی بجائے واپسی اس طریقہ کی پیچیدگی کا باعث بنتی ہے جو سرنی کو واپس کرتا ہے۔ بعض اوقات یہ استدلال کیا جاتا ہے کہ صفر کی لمبائی والی صف کو واپس کرنے سے null کو واپس کرنا افضل ہے کیونکہ یہ میموری میں سرنی کو مختص کرنے کے اخراجات سے بچتا ہے۔ یہ دلیل دو وجوہات کی بناء پر ناکام ہوتی ہے۔ سب سے پہلے، اس سطح پر کارکردگی کے بارے میں فکر کرنے کا کوئی فائدہ نہیں ہے جب تک کہ پروگرام کی پروفائلنگ سے یہ ظاہر نہ ہو کہ یہ خاص طریقہ کارکردگی میں کمی کی بنیادی وجہ ہے۔ دوسرا، ہر ایک ایسے طریقہ پر کال جو ریکارڈز واپس نہیں کرتی ہے وہی صفر لمبائی کی صف کو کلائنٹ کو دے سکتی ہے، کیونکہ کوئی بھی صفر-لمبائی سرنی ناقابل تغیر ہے، اور ناقابل تغیر اشیاء کو شیئر کیا جا سکتا ہے۔ درحقیقت، بالکل ایسا ہی ہوتا ہے جب آپ کسی مجموعے سے عناصر کو ٹائپ کنٹرول شدہ صف میں پھینکنے کے لیے معیاری محاورہ استعمال کرتے ہیں:
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
اس محاورے میں، ایک مستقل، صفر کی لمبائی کی صف کے طور پر،toArray ایک طریقہ کو منتقل کیا جاتا ہے تاکہ یہ ظاہر کیا جا سکے کہ اسے کس قسم کی واپسی کرنی چاہیے۔ عام طور پر، طریقہ toArrayواپسی ہوئی سرنی کے لیے میموری کی جگہ مختص کرتا ہے، لیکن اگر مجموعہ خالی ہے، تو اسے ان پٹ سرنی میں رکھا جاتا ہے، اور تصریح اس بات کو Сollесtion,tоАггау(Оbjесt[])یقینی بناتی ہے کہ اگر ان پٹ سرنی مجموعہ کو رکھنے کے لیے کافی بڑا ہے، تو وہی واپس کیا جاتا ہے۔ لہٰذا، پیش کردہ محاورہ خود کبھی بھی میموری میں صفر کی لمبائی والی صف کو مختص نہیں کرے گا، بلکہ "قسم کے مخصوص مستقل" کا استعمال کرتا ہے۔ آئیے خلاصہ کرتے ہیں۔ صفر کی لمبائی والے سرنی کے بجائے null واپس کرنے کے لئے کسی صف کے طریقہ کی کوئی وجہ نہیں ہے۔ یہ محاورہ C پروگرامنگ لینگویج سے نکلتا ہے، جہاں ایک صف کی لمبائی خود ہی صف سے الگ کر دی جاتی ہے۔ C میں، صفر کی لمبائی والی صف کے لیے میموری مختص کرنا بیکار ہے۔ ماخذ: جوشوا بلوچ، جاوا ٹی ایم ایفیکٹیو پروگرامنگ، لوری پبلشنگ ہاؤس
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION