JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 161 “Null” -y “Java” -da nädip ulanmaly...

Kofe arakesmesi # 161 “Null” -y “Java” -da nädip ulanmaly

Toparda çap edildi
Çeşme: Orta Bu makala, Java kody bilen işleýän wagtyňyz islege bagly maksadyna has gowy düşünmäge kömek eder. Kofe arakesmesi # 161  “Null” -y “Java” -da nädip islemeli - 1Ilki bilen Java kody bilen işläp başlanymda, köplenç “Goşmaça” ulanmagy maslahat berdim. Theöne şol wagt “Optional” -y ulanmagyň näme üçin null bahalar üçin işlemegi has gowudygyna düşünmedim. Bu makalada näme üçin hemmämiziň islege görä has köp ulanmalydygymyzy we koduň hiline zyýan berýän koduňyzy artykmaç saýlamagyň öňüni nädip almalydygyňyzy siziň bilen paýlaşmak isleýärin.

Meýletin näme?

Meýletin parametr obýektleri götermek we dürli API-ler bilen işlemäge mümkinçilik berýän null salgylanmalary üpjün etmek üçin ulanylýar . Kod parçasyna seredeliň:
Coffee coffee = new Coffee();
Integer quantity = coffee.getSugar().getQuantity();
Bizde Şeker obýektiniň mysalyndan şeker alýan kofe mysalymyz bar . Kofe konstruktorynda mukdar bahasynyň hiç haçan kesgitlenmändigini çaklasak , onda coffee.getSugar (). GetQuantity () NullPointerException- y yzyna gaýtaryp berer . Elbetde, meseläni düzeltmek üçin elmydama gowy köne null barlaglary ulanyp bileris.
Coffee coffee = new Coffee();
Integer quantity = 0;
if (coffee.getSugar() != null) {
  quantity = coffee.getSugar().getQuantity();
}
Indi hemme zat gowy ýaly. Javaöne Java kody ýazanymyzda, null barlaglary amala aşyrmakdan saklanarys . Meýletin ulanyp nädip edip boljakdygyny göreliň.

Meýletin nädip döretmeli

Goşmaça obýektleri döretmegiň üç usuly bar:
  • (T bahasy) - islege bagly däl obýektiň dessine. () Null obýekte ýüzlenmek üçin NullPointerException zyňjakdygyny biliň .

  • ofNullable (T bahasy) - null bolup bilýän obýekt üçin goşmaça baha döredýär.

  • boş () - null salgylanmany görkezýän Goşmaça mysal döredýär .

// пример использования 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();
Şeýlelik bilen, islege bagly obýekt bar. Indi islege bagly iki esasy usula göz aýlalyň:
  • isPresent () - Bu usul, islege bagly obýektiň gymmaty ýokdygyny ýa-da ýokdugyny aýdýar.

  • get () - Häzirki bahasy bilen islege görä bahany alýar. Boş islege jaň etmek () jaň etmegiň NullPointerException- a sebäp boljakdygyny biliň .

“Optional” bilen işleýän wagtyňyz diňe get () we isPresent () ulanýan bolsaňyz , ýitirýändigiňizi ýadyňyzdan çykarmaň! Muňa düşünmek üçin, ýokardaky mysaly islege görä täzeden ýazalyň.

Meýletin bilen Null barlagyny gowulandyrmak

Onda ýokardaky kody nädip gowulandyryp bileris? Islege görä, isPresent () ulanyp, obýektiň barlygyna düşünip bileris we get () ulanyp alyp bileris . Kofe.getSugar () netijesini islege görä gaplamak we isPresent () usuly bilen başlalyň . Bu, getSugar () -yň yzyna gaýdyp gelýändigini kesgitlemäge kömek eder .
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();
}
Bu mysala seretseň, kofe.getSugar () netijesini islege görä gaplamak hiç hili gymmatlyk däl ýaly, kynçylyk döredýär. Goşmaça synpdan iň halaýan funksiýalarym hasaplap, netijäni gowulaşdyryp bileris:
  • karta (Funksiýa <? super T ,? U> kartany uzadýar) - Berlen funksiýa islege bagly bahany kartalaşdyrýar. Meýletin parametr boş bolsa, karta () Optional.empty () gaýdyp geler .

  • orElse (T other) get () usulynyň “aýratyn” görnüşidir . Islege görä bahany alyp biler. Şeýle-de bolsa, boş islege bagly bolsa, bu orElse () usulyna geçen bahany yzyna gaýtaryp berer .

Usul, goşmaça mysaldaky bahany yzyna gaýtaryp berer. Iföne islege bagly parametr boş bolsa, hiç hili gymmaty ýok bolsa, orElse () deslapky baha diýlip bilinýän usul goluna geçer.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
    .map(it -> it.getQuantity())
    .orElse(0);
Bu hakykatdanam ajaýyp - iň bolmanda şeýle pikir edýärin. Indi, boş bahasy bar bolsa, deslapky bahany yzyna gaýtarmak islemesek, haýsydyr bir kadadan çykma etmeli. orElseThrow (üpjün ediji <? X uzadýar> kadadan çykma üpjünçiligi) goşmaça parametrlerdäki bahany yzyna gaýtaryp berýär, ýa-da islege görä boş bolsa kadadan çykma atýar.
Coffee coffee = new Coffee();

Integer quantity = Optional.ofNullable(coffee.getSugar())
  .map(it -> it.getQuantity())
  .orElseThrow(IllegalArgumentException::new);
Görşüňiz ýaly, islege bagly birnäçe artykmaçlyk berýär:
  • tezisler _
  • null zatlary dolandyrmak üçin API üpjün edýär
  • gazanylýanlary aňlatmaga deklaratiw çemeleşmäge mümkinçilik berýär

Meýletin bilen nädip täsirli bolmaly

Işimde, usul “netijesiz” ýagdaýy yzyna gaýtaryp bilse, “Optional” -y yzyna gaýtarma görnüşi hökmünde ulanýaryn. Usullar üçin gaýdyp görnüşleri kesgitlänimde köplenç ulanýaryn.
Optional<Coffee> findByName(String name) {
   ...
}
Käwagt bu zerur däl. Mysal üçin, şeker synpynda getQuantity () ýaly int-ni yzyna gaýtaryp berýän usulym bar bolsa , netijede “mukdar ýok” diýmek üçin netije ýok bolsa, usul 0 yzyna gaýdyp biler. Indi muny bilip, Kofe synpyndaky Şeker parametrini islege bagly diýip görkezip bileris . Bir seretseň, bu gowy pikir ýaly bolup görünýär, sebäbi teoriýa boýunça kofede şekeriň bolmagy hökman däl. Şeýle-de bolsa, islege bagly däl wagty haçan ýüzlenmek isleýärin . Aşakdaky ssenariýalarda islege bagly ulanmakdan saklanmalydyrys:
  • DTO ýaly POJO-lar üçin parametr görnüşleri hökmünde . Opsiýalar yzygiderli bolup bilmeýär, şonuň üçin olary POJO-da ulanmak obýekti tertipsizleşdirýär.

  • Usul argumenti hökmünde. Usul argumenti null bolup bilýän bolsa , arassa kod nukdaýnazaryndan, null geçmek islege bagly däl. Mundan başga-da, null usul argumentiniň ýoklugyny abstrakt çözmek üçin artykmaç usullary döredip bilersiňiz.

  • Collectionok bolan Kolleksiýa obýektini görkezmek. Kolleksiýalar boş bolup biler, şonuň üçin boş ýygyndy ýa-da sanaw ýaly boş ýygyndy , kolleksiýany bahasyz görkezmek üçin ulanylmaly.

Netije

Meýletin, Java kitaphanasyna güýçli goşundy boldy. Bar bolmadyk zatlary dolandyrmagyň usulyny üpjün edýär. Şonuň üçin hyýanatçylykly duzaga düşmän usullary işläp düzmekde göz öňünde tutulmalydyr. Hawa, null barlaglary we null işlemegi amala aşyrýan ajaýyp kod ýazyp bilersiňiz, ýöne Java jemgyýeti islege görä ulanmagy makul bilýär. Missingitirilen gymmatlyklary nädip çözmelidigini netijeli habar berýär, bulaşyk Null barlaglaryndan has aňsat we uzak wagtyň dowamynda koduňyzda kemçilikleriň az bolmagyna sebäp bolýar.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION