Java 8 Optional – oikea käyttö

Olen käytellyt Java 8 versiota tuotannossa jo useammassa paikassa yli vuoden verran, mutta Optional luokasta en ole kirjoitellut – enkä suuremmin käyttänyt. Olen kuitenkin suuri NullPointerException:ien vihaaja (emmekö me kaikki) ja olen aiemmin vähennellyt niitä lähinnä hyvillä paluuarvo ja parametrikäytännöillä. Tämähän on yleisimpiä ja viheliäisimmin metsästettäviä poikkeuksia Javassa – kiitos poikkeuksien kuplimisen.

Syy miksi en ole kirjoitellut tai käytellyt Optionalia vielä on että esimerkit joita olen nähnyt sen käytöstä ovat olleet surkeita. Kun Javan päälle laastarilappu-liimataan uusia piirteitä, käy usein niin että lääke on sivuvaikutuksiltaan pahempi kuin alkuperäinen sairaus. Ja Optional-paluuarvon tarkistaminen if-lauseilla on juuri sitä. Hyi!

Nyt näin kuitenkin ihan virkistävän uuden blogipostauksen jossa muistuteltiin muistakin tavoista. Teen myöhästyneen uudenvuodenlupauksen testailla näitä itsekin, ja katsoa tykästynkö. Ideana on korvata Optional-arvon tarkistus ehtolauseessa sen omilla funktioilla ja ominaisuuksilla, ja näin saada koodista luettavampaa silti säilyttäen fiksumpi null pointer käsittely.

Ytimessään idea on tässä:

Optional<String> result = service.find("id");
final String value = result.orElseGet(() -> "<absent>").trim();

Tämä on jo itselle ihan sopiva tapa, pystyn lukemaan sen. Artikkelin kirjoittajalla oli toinenkin idea, joka koski Optional käyttöä kokoelmana, näin:

Optional<String> result = service.find("id");
String value = result.map(String::trim).orElse("<absent>");
Tästä en ole ihan varma, jotenkin häiritsee ajatus että vedetään collections apit hatusta mukaan, mutta kiitokset luettavuudesta saa tämäkin.
Artikkelin kirjoittajalla oli pari muutakin hyvää pointtia, joten en ala kopioimaan niitä tähän vaan pidetään tätä artikkelia teaserinä. Jos mielenkiinto heräsi, kipin kapin lukemaan alkuperäinen artikkeli tuosta alta 😉

Ja artikkelin lähde:

https://www.voxxed.com/blog/2015/02/defence-java-8s-optional-use/

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s