JavaRush /Blog Jawa /Random-JV /Ngopi #161. Carane nangani Null ing Jawa nggunakake Opsio...

Ngopi #161. Carane nangani Null ing Jawa nggunakake Opsional

Diterbitake ing grup
Sumber: Sedheng Artikel iki bakal mbantu sampeyan luwih ngerti tujuan Opsional nalika nggarap kode Jawa. Ngopi #161.  Cara nangani Null ing Jawa nggunakake Opsional - 1Nalika aku miwiti nggarap kode Jawa, aku kerep disaranake nggunakake Opsional. Nanging ing wektu aku ora ngerti apa sebabe nggunakake Opsional luwih apik tinimbang ngleksanakake penanganan kanggo nilai null. Ing artikel iki, aku arep kanggo nuduhake karo sampeyan kok aku kabeh kudu nggunakake opsional liyane, lan carane supaya over-optionalizing kode, kang ngrugekake kanggo kualitas kode.

Apa iku Opsional?

Parameter Opsional digunakake kanggo nindakake obyek lan ngaktifake referensi null kanggo ditangani dening macem-macem API. Ayo ndeleng cuplikan kode:
Coffee coffee = new Coffee();
Integer quantity = coffee.getSugar().getQuantity();
Kita duwe conto Kopi sing entuk gula saka conto obyek Gula . Yen kita nganggep yen nilai kuantitas ora tau disetel ing konstruktor Kopi , banjur coffee.getSugar ().getQuantity () bakal ngasilake NullPointerException . Mesthi, kita bisa tansah nggunakake mriksa null lawas apik kanggo ndandani masalah.
Coffee coffee = new Coffee();
Integer quantity = 0;
if (coffee.getSugar() != null) {
  quantity = coffee.getSugar().getQuantity();
}
Saiki kabeh katon apik. Nanging nalika nulis kode Jawa, luwih becik kita ora ngleksanakake mriksa null . Ayo ndeleng carane iki bisa rampung nggunakake Opsional.

Cara nggawe Opsional

Ana telung cara kanggo nggawe obyek Opsional:
  • saka (Nilai T) - instantiation saka obyek non-null Opsional. Elinga yen nggunakake saka () kanggo ngrujuk menyang obyek null bakal uncalan NullPointerException .

  • ofNullable (Nilai T) - nggawe Nilai Opsional kanggo obyek sing bisa null.

  • kosong () - Nggawe Kayata Opsional sing nggantosi referensi kanggo 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();
Dadi sampeyan duwe obyek Opsional. Saiki ayo goleki rong cara utama kanggo Opsional:
  • isPresent () - Cara iki ngandhani apa obyek Opsional ngemot nilai non-null.

  • njaluk () - Retrieves Nilai kanggo Pilihan karo nilai saiki. Elinga yen nelpon njaluk () ing Opsional kosong bakal nyebabake NullPointerException .

Elinga yen sampeyan mung nggunakake get () lan isPresent () nalika nggarap Opsional, sampeyan ilang! Kanggo mangerteni iki, ayo saiki nulis ulang conto ing ndhuwur nganggo Opsional.

Ngapikake Null Priksa karo Opsional

Dadi kepiye carane bisa nambah kode ing ndhuwur? Kanthi Opsional kita bisa mangerteni anané obyek nggunakake isPresent () lan njupuk nggunakake njaluk () . Ayo dadi miwiti dening packaging asil coffee.getSugar () karo Pilihan lan nggunakake isPresent () cara . Iki bakal mbantu kita nemtokake yen getSugar () ngasilake 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();
}
Deleng ing conto iki, packaging asil coffee.getSugar () menyang Opsional koyone ora nambah nilai, nanging malah nambah alangan. Kita bisa nambah asil kanthi nggunakake apa sing dakanggep minangka fungsi favorit saka kelas Opsional:
  • map (Fungsi<? super T,? ngluwihi U> mapper) - Peta nilai sing ana ing Opsional kanggo fungsi kasedhiya. Yen parameter Opsional kosong, banjur map () bakal bali Optional.empty () .

  • orElse (T liyane) iku versi "khusus" saka cara njaluk () . Bisa entuk nilai sing ana ing Opsional. Nanging, ing cilik saka Opsional kosong, iki bakal bali Nilai liwati kanggo orElse () cara .

Cara kasebut bakal ngasilake nilai sing ana ing conto Opsional. Nanging yen parameter Opsional kosong, tegese ora ngemot nilai, banjur orElse () bakal ngasilake nilai sing diterusake menyang teken metode, sing dikenal minangka nilai standar.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
    .map(it -> it.getQuantity())
    .orElse(0);
Iki pancen kelangan - paling aku mikir. Saiki, yen ana nilai kosong, kita ora pengin ngasilake nilai standar, mula kita kudu mbuwang sawetara pengecualian. orElseThrow(Supplier<? ngluwihi X> exceptionSupplier) ngasilake nilai sing ana ing paramèter Opsional, utawa mbuwang pangecualian yen Opsional kosong.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
  .map(it -> it.getQuantity())
  .orElseThrow(IllegalArgumentException::new);
Nalika sampeyan bisa ndeleng, Opsional menehi sawetara kaluwihan:
  • abstrak mriksa null
  • menehi API kanggo nangani obyek null
  • ngidini pendekatan deklaratif kanggo nyatakake apa sing digayuh

Carane dadi efektif karo Opsional

Ing karya, aku nggunakake Pilihan minangka jinis bali nalika cara bisa bali negara "ora ana asil". Aku biasane nggunakake nalika nemtokake jinis bali kanggo cara.
Optional<Coffee> findByName(String name) {
   ...
}
Kadhangkala iki ora perlu. Contone, yen aku duwe cara sing ngasilake int , kayata getQuantity () ing kelas Gula , cara kasebut bisa ngasilake 0 yen asil nol kanggo makili "ora ana jumlah". Saiki, ngerti iki, kita bisa mikir yen parameter Gula ing kelas Kopi bisa diwakili minangka Opsional. Sepisanan, iki katon apik amarga, ing teori, gula ora perlu ana ing kopi. Nanging, iki ngendi aku arep kanggo alamat nalika ora kanggo nggunakake Opsional. Kita kudu ngindhari nggunakake Opsional ing skenario ing ngisor iki:
  • Minangka jinis parameter kanggo POJOs , kayata DTOs . Optionals ora serializable, supaya nggunakake ing POJO ndadekake obyek unserializable.

  • Minangka argumen metode. Yen argumen metode bisa null , banjur saka perspektif kode murni, pass null isih luwih disenengi kanggo pass Opsional. Kajaba iku, sampeyan bisa nggawe cara kakehan kanggo nangani abstrak ora ana argumen metode null.

  • Kanggo makili obyek Koleksi sing ilang. Koleksi bisa kosong, dadi Koleksi kosong , kaya Set utawa Dhaptar kosong , kudu digunakake kanggo makili Koleksi tanpa nilai.

Kesimpulan

Opsional wis dadi tambahan sing kuat kanggo perpustakaan Jawa. Iki menehi cara kanggo nangani obyek sing bisa uga ora ana. Mulane, kudu digatekake nalika ngembangake metode tanpa ana ing jebakan penyalahgunaan. Ya, sampeyan bisa nulis kode gedhe sing ngleksanakake mriksa null lan null nangani, nanging masyarakat Jawa luwih seneng nggunakake Opsional. Iku komunikasi èfèktif carane nangani nilai ilang, luwih gampang diwaca saka mriksa Null tumoto, lan asil ing kurang kewan omo ing kode ing roto dawa.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION