Java 8 ja Lambda Expressions

Ok, nyt oli hetki aikaa alkaa maistelemaan Java 8 uusia piirteitä. Kapistushan tulee julkaisuun vuonna 2013, eli mitään kiirettä ei sen suhteen ole, mutta kun nyt työn puolesta toimenkuvaan vähän niinkuin kuuluu olla etukenossa, niin..  latailin jo developer previewn java 8 työkaluista, ja ei muuta kuin koodailemaan.

Lambda expression on siis uudenlainen syntaksi. Skeptikoiden mielestä tämä on sama kuin anonyymin luokan käyttö, eli kutsutaan jotain metodia, ojennetaan parametrina anonyymi luokka jossa on algoritmi sisässä. Esim. Comparator toteutus. Lambda Expression on kuitenkin syvemmälle menevä muutos joka muuttaa Java-kielen syntaksia. Tällä hetkellä päällimmäisin muutos on uusi operaattori: ->

Tässähän ei ole mitään uutta, Scalassa ja C# kielessä on ollut jo tämä piirre aikansa, mutta hiljaa hyvä tulee.. Tässä esimerkki Lambda Expression käytöstä:

x -> x + 1

Eli mitäpä tuo tarkoittaa? Määritellään tavallaan anonyymi ilmassa roikkuva funktio, joka ei näytä kuuluvan mihinkään luokkaan. Funktio ottaa parametrinaan muuttujan x, ja määrittelee operaattorin perään sille algoritmiksi: palauta x + 1. Tietysti tässä tapauksessa lambda expression olettaa vahvasti että x on arvo jolle +1 on laillinen operaatio, esim. numeroarvo. Tuo ei tietysti yksinään tee mitään, vaan tätä täytyy käyttää jossain. Määritellään rajapinta joka sisältää metodin joka ottaa sisään arvon ja palauttaa toisen:

interface MyCalculator {
  public double operate (double input);
}

Tähän asti tuttua kamaa. Seuraavaksi määritellään lambda expression ja asetetaan muuttuja viittaamaan siihen:

MyCalculator mc = (x) -> x+1;
System.out.println(mc.operate(1));

Eli näillä tulostuu tietysti ruudulle kaksi. Eiköhän tässä ole teaseriksi sopivasti, palataan asiaan joskus kun tiedän näistä enemmän. Aikaisinhan tässä liikkeellä ollaan

Ei mikään suuri salaisuus, että näitä tullaan näkemään eritoten Java 8 Collections-rajapinnoissa. Juuri kun suuri osa koodaajista alkaa olla toipunut Java 5 Generics tyyppiparametrien käytöstä.. 😉

 

 

 

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