JavaRush /جاوا بلاگ /Random-SD /ڪافي بريڪ #161. جاوا ۾ Null کي ڪيئن سنڀاليو اختياري استعم...

ڪافي بريڪ #161. جاوا ۾ Null کي ڪيئن سنڀاليو اختياري استعمال ڪندي

گروپ ۾ شايع ٿيل
ذريعو: وچولي هي آرٽيڪل توهان کي جاوا ڪوڊ سان ڪم ڪرڻ دوران اختياري جي مقصد کي بهتر سمجهڻ ۾ مدد ڏيندو. ڪافي بريڪ #161.  جاوا ۾ Null کي ڪيئن سنڀاليو اختياري - 1جڏهن مون پهريون ڀيرو جاوا ڪوڊ سان ڪم ڪرڻ شروع ڪيو، مون کي اڪثر اختياري استعمال ڪرڻ جي صلاح ڏني وئي. پر ان وقت مون کي ٿورڙي ڄاڻ هئي ته اختياري استعمال ڪرڻ بهتر آهي ڇو ته نيل ويلز لاءِ هينڊلنگ لاڳو ڪرڻ کان. هن آرٽيڪل ۾، مان توهان سان حصيداري ڪرڻ چاهيان ٿو ڇو ته مان سمجهان ٿو ته اسان سڀني کي اختياري وڌيڪ استعمال ڪرڻ گهرجي، ۽ توهان جي ڪوڊ کي وڌيڪ اختيار ڪرڻ کان ڪيئن بچڻ گهرجي، جيڪو ڪوڊ جي معيار لاء نقصانڪار آهي.

اختياري ڇا آهي؟

اختياري پيٽرولر شيون کڻڻ لاءِ استعمال ڪيو ويندو آهي ۽ مختلف APIs پاران هٿ ڪرڻ لاءِ نال حوالن کي چالو ڪيو ويندو آهي . اچو ته ڪوڊ جو ٽڪرو ڏسو:
Coffee coffee = new Coffee();
Integer quantity = coffee.getSugar().getQuantity();
اسان وٽ ڪافي جو مثال آهي جنهن ۾ اسان کي شوگر اعتراض جي مثال مان ڪجهه کنڊ ملي ٿي . جيڪڏهن اسان فرض ڪريون ته مقدار جي قيمت ڪڏهن به ڪافي تعمير ڪندڙ ۾ مقرر نه ڪئي وئي هئي ، پوء coffee.getSugar().getQuantity() هڪ NullPointerException واپس ڪندو . يقينن، اسان هميشه استعمال ڪري سگهون ٿا سٺي پراڻي نول چيڪن کي حل ڪرڻ لاء.
Coffee coffee = new Coffee();
Integer quantity = 0;
if (coffee.getSugar() != null) {
  quantity = coffee.getSugar().getQuantity();
}
هاڻي ته سڀ ڪجهه ٺيڪ ٿيڻ لڳي. پر جڏهن جاوا ڪوڊ لکندا آهيون، اسان بهتر ڪنداسين ته null چيڪن کي لاڳو ڪرڻ کان پاسو ڪيو وڃي . اچو ته ڏسون ته اهو ڪيئن ٿي سگهي ٿو اختياري استعمال ڪندي.

اختياري ڪيئن ٺاھيو

اختياري شيون ٺاهڻ جا ٽي طريقا آهن:
  • of(T value) - هڪ اختياري غير null اعتراض جي تڪميل. آگاهه رهو ته () هڪ null اعتراض جي حوالي ڪرڻ لاء استعمال ڪندي هڪ NullPointerException اڇلائي ڇڏيندو .

  • ofNullable(T value) - ھڪڙي شئي لاءِ اختياري قدر ٺاھي ٿو جيڪا null ٿي سگھي ٿي.

  • empty() - هڪ اختياري مثال ٺاهي ٿو جيڪو null جي حوالي سان نمائندگي ڪري ٿو .

// пример использования Optional.of(T Value)
String name = "foo";
Optional<String> stringExample = Optional.of(name)
// пример использования Optional.ofNullable(T Value)
Integer age = null;
Optional<Integer> integerExample= Optional.ofNullable(age)
// пример использования Optional.empty()
Optional<Object> emptyExample = Optional.empty();
تنهنڪري توهان وٽ هڪ اختياري اعتراض آهي. هاڻي اچو ته اختياري لاءِ ٻن مکيه طريقن تي هڪ نظر وجهون:
  • isPresent() - هي طريقو توهان کي ٻڌائي ٿو ته ڇا اختياري شئي ۾ هڪ غير null قدر شامل آهي.

  • get() - موجوده قيمت سان اختياري لاءِ قدر حاصل ڪري ٿو. آگاهه رهو ته ڪال ڪرڻ get() هڪ خالي اختياري تي نتيجو ٿيندو NullPointerException .

مهرباني ڪري نوٽ ڪريو ته جيڪڏهن توهان صرف get() ۽ isPresent() استعمال ڪندا آهيو جڏهن اختياري سان ڪم ڪري رهيا آهيو، توهان وڃائي رهيا آهيو! ان کي سمجهڻ لاءِ اچو ته هاڻي مٿين مثال کي Optional سان ٻيهر لکون.

اختياري سان نول چيڪنگ کي بهتر بنائڻ

پوء اسان مٿي ڏنل ڪوڊ کي ڪيئن بهتر ڪري سگهون ٿا؟ اختياري سان اسان isPresent() استعمال ڪندي ڪنهن شئي جي موجودگي کي سمجهي سگهون ٿا ۽ حاصل ڪري سگھون ٿا () استعمال ڪندي . اچو ته coffee.getSugar() جي نتيجي کي Optional سان پيڪنگ ڪندي ۽ isPresent() طريقو استعمال ڪندي شروع ڪريون . هي اسان کي اهو طئي ڪرڻ ۾ مدد ڏيندو ته ڇا getSugar() null موٽائي ٿو.
Coffee coffee = new Coffee();
Optional<String> sugar = Optional.ofNullable(coffee.getSugar());
int quantity = 0;
if (sugar.isPresent()) {
  Sugar sugar = sugar.get();
  int quantity = sugar.getQuantity();
}
هن مثال کي ڏسندي، coffee.getSugar() جي نتيجي کي اختياري ۾ پيڪ ڪرڻ سان ڪا به قيمت شامل نه ٿي لڳي، بلڪه پريشاني وڌي ٿي. اسان ان کي استعمال ڪندي نتيجو بهتر ڪري سگھون ٿا جيڪو مان سمجھان ٿو اختياري ڪلاس مان پنھنجو پسنديده افعال:
  • map(Function<? super T,? extensions U> mapper) - مهيا ڪيل فنڪشن ۾ اختياري ۾ موجود قدر جو نقشو ٺاھيو. جيڪڏهن اختياري پيٽرولر خالي آهي، پوء نقشو () واپس ڪندو Optional.empty() .

  • orElse(T other) get() طريقي جو هڪ ”خاص“ ورزن آهي . اهو اختياري ۾ موجود قدر حاصل ڪري سگهي ٿو. جڏهن ته، هڪ خالي اختياري جي صورت ۾، اهو واپس ڪندو قدر ڏانهن گذري ويو orElse() طريقو .

طريقو اختياري مثال ۾ موجود قدر واپس ڪندو. پر جيڪڏهن اختياري پيٽرولر خالي آهي، مطلب ته ان ۾ ڪا به قيمت نه آهي، پوءِ orElse() ان جي طريقي جي دستخط ڏانهن گذري ويل قيمت کي واپس ڪندو، جيڪو ڊفالٽ قدر طور سڃاتو وڃي ٿو.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
    .map(it -> it.getQuantity())
    .orElse(0);
هي واقعي ٿڌو آهي - گهٽ ۾ گهٽ مان سمجهان ٿو. هاڻي، جيڪڏهن خالي قيمت جي صورت ۾ اسان ڊفالٽ قيمت واپس ڪرڻ نٿا چاهيون، پوء اسان کي ڪجهه قسم جي استثناء کي اڇلائڻ جي ضرورت آهي. orElseThrow(Supplier<? extensions X>exceptionSupplier) اختياري پيرا ميٽرز ۾ موجود قدر کي واپس ڏئي ٿو، يا جيڪڏهن اختياري خالي هجي ته استثنا ڏئي ٿو.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
  .map(it -> it.getQuantity())
  .orElseThrow(IllegalArgumentException::new);
جئين توهان ڏسي سگهو ٿا، اختياري ڪيترائي فائدا مهيا ڪري ٿو:
  • خلاصو null چيڪ
  • null شين کي سنڀالڻ لاءِ هڪ API مهيا ڪري ٿو
  • بياني انداز کي بيان ڪرڻ جي اجازت ڏئي ٿي جيڪا حاصل ڪئي پئي وڃي

اختياري سان ڪيئن اثرائتو ٿئي

منهنجي ڪم ۾، مان واپسي جي قسم جي طور تي اختياري استعمال ڪريان ٿو جڏهن هڪ طريقو واپس ڪري سگهي ٿو "نه نتيجو" حالت. مان عام طور تي ان کي استعمال ڪريان ٿو جڏهن طريقن جي واپسي جي قسمن جي وضاحت ڪريو.
Optional<Coffee> findByName(String name) {
   ...
}
ڪڏهن ڪڏهن اهو ضروري ناهي. مثال طور، جيڪڏهن مون وٽ هڪ طريقو آهي جيڪو هڪ int واپس ڪري ٿو ، جهڙوڪ getQuantity() شوگر ڪلاس ۾ ، پوء اهو طريقو 0 واپس ڪري سگهي ٿو جيڪڏهن نتيجو "ڪو مقدار" جي نمائندگي ڪرڻ لاء null آهي . هاڻي، اهو ڄاڻڻ، اسان اهو سوچي سگهون ٿا ته ڪافي ڪلاس ۾ شوگر پيٽرولر کي اختياري طور پيش ڪري سگهجي ٿو. پهرين نظر ۾، اهو هڪ سٺو خيال وانگر لڳي ٿو، نظريي ۾، کنڊ ڪافي ۾ موجود هجڻ جي ضرورت ناهي. بهرحال، هي آهي جتي مان پتو لڳائڻ چاهيان ٿو جڏهن اختياري استعمال نه ڪيو وڃي. اسان کي هيٺين حالتن ۾ اختياري استعمال ڪرڻ کان پاسو ڪرڻ گهرجي:
  • جيئن POJOs لاءِ پيٽرول جا قسم ، جهڙوڪ DTOs . اختياري سيريلائيبل نه هوندا آهن، تنهنڪري انهن کي POJO ۾ استعمال ڪرڻ اعتراض جي سيريلائيزيشن کي غير فعال ڪري ٿو.

  • هڪ طريقو دليل جي طور تي. جيڪڏهن هڪ طريقو دليل null ٿي سگهي ٿو ، پوء هڪ خالص ڪوڊ جي نقطي نظر کان، پاس ڪرڻ null اڃا به ترجيح آهي اختياري پاس ڪرڻ کان. اضافي طور تي، توهان ٺاهي سگهو ٿا اوورلوڊ ٿيل طريقن کي ختم ڪرڻ لاءِ خلاصي طور تي نال طريقي جي دليل جي غير موجودگي کي.

  • هڪ جمع اعتراض جي نمائندگي ڪرڻ لاء جيڪو غائب آهي. مجموعا خالي ٿي سگھن ٿا، تنھنڪري ھڪڙو خالي مجموعو ، جھڙوڪ خالي سيٽ يا لسٽ ، استعمال ٿيڻ گھرجي ھڪڙي مجموعن کي ظاھر ڪرڻ لاءِ قدر کان سواءِ.

نتيجو

اختياري جاوا لائبريري ۾ هڪ طاقتور اضافو بڻجي چڪو آهي. اهو شين کي سنڀالڻ جو هڪ طريقو مهيا ڪري ٿو جيڪو شايد موجود نه هجي. تنهن ڪري، ان کي غور ۾ رکڻ گهرجي جڏهن طريقن کي ترقي ڪرڻ کان سواء بدعنواني جي جال ۾ گرڻ کان سواء. ها، توهان لکي سگهو ٿا عظيم ڪوڊ جيڪو لاڳو ڪري ٿو نيل چيڪ ۽ نال هينڊلنگ، پر جاوا ڪميونٽي اختياري استعمال ڪرڻ کي ترجيح ڏئي ٿي. اهو مؤثر طريقي سان ڳالهائي ٿو ته گم ٿيل قدرن کي ڪيئن سنڀالجي، پڙهڻ لاءِ تمام آسان آهي گندي Null چيڪن کان، ۽ نتيجي ۾ توهان جي ڪوڊ ۾ ڊگهي عرصي ۾ گهٽ ڪيڙا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION