Miksi tarvitsemme Lambda Lausekkeita?

Pakko blogata pikkasen, törmäsin erinomaiseen artikkeliin jossa selitettiin miksi Lambda Expressions (lausekkeet) ovat niin hyödyllisiä, miksi niitä tarvitaan ja miksi ne ovat tulossa Javaan. Olen itse niihin ihastunut jo Scalan puolella, ja leikitellyt myös JavaScript koodissa, mutta on ollut vaikeaa pukea sanoiksi mitä hyödyllistä niissä on, sen on vain jollain tasolla itse tiedostanut.

Joka tapauksessa, tässä artikkelissa ei ole mitään omaperäistä ideaa, vain hatunnosto originaalille. Kaveri nimittäin selittää artikkelissaan miten hän käskyttää normaalisti lastaan for-loopin+ehtolauseen tavoin:

  • Pistä lelut pois. Onko maassa leluja?
  • Sofia: On, pallo
  • Ok, laita pallo laatikkoon. Onko maassa vielä jotain?
  • Sofia: On, nukke
  • Ok, laita nukke laatikkoon. Onko maassa vielä jotain?
  • Sofia: Ei ole
  • Ok, valmista tuli sitten.

Tämähän vastaa nykyisellä Java-kielellä esim. tämäntapaista:

for (int number : numbers) {
 System.out.println(number);
}

Eli tiukasti kontrolloitua ulkopuolelta käskytettyä toimintaa. Itse oliolta otetaan kaikki valta ja aivojen käyttö pois. Vähän niinkuin perinteisessä tiukasti johdetussa projektitavassa resursseilta 😉

Miten homma hoituisi sitten lambdalla? Vähän kuten ketteryydessä. Annetaan valta olioille. Kuka on paras ekspertti päättämään miten joku työ tehdään? Työn tekijä itse (yleensä, olettaen että hän on pätevä tehtävään). Jos lapselle annetaankin yksinkertaisesti käsky: Kerää lelut pois lattialta, hän voikin itse päättää miten sen tekee. Hän voi esim. kerätä kaikki lelut kerralla syliin, tai viedä kaksi tai yhden kerrallaan, riippuen niiden koosta, muodosta, painosta. Hän voi priorisoida mistäpäin alottaa tekemisen. Nämä ovat ohjelmointipuolella rinnastettavissa mm. ytimien käyttöön rinnakkaisprosessoinnissa, sekä algoritmien optimointiin automaattisesti.  Ja niitä on kovian paljon vaikeampaa tehdä ulkoapäin hyvin ilman ylenmääräistä kommunikaatiota ja monimutkaista kaksisuuntaista rajapintaa.

Eli em. Java 8 Lambdalla (anastettu allaolevasta artikkelista 😉

numbers.forEach((Integer value) -> System.out.println(value));

Käykö järkeen? Toivottavasti, Lambdat ovat tulossa, halusit tai et. Niitä tullaan käyttämään. Niitä täytyy pystyä ymmärtämään. Toivottavasti olet valmis.

http://java.dzone.com/articles/why-we-need-lambda-expressions