Nuo Java link Scala, II
Aukštesnės eilės funkcijos
Informatikoje ir matematikoje (lambda aritmetikoje) aukštesnės eilės funkcija (kitaip dar funktorius) vadinama tokia funkcija, kuri tenkina bent vieną sąlygą:
- priima kaip argumentą vieną ar daugiau funkcijų
- grąžina funkciją
Kitos funkcijos vadinamos pirmos eilės.
Scala naudojamos aukštesnės eilės funkcijos
Funkcinis programavimas leidžia nutolti nuo pažingsninio komandų užrašymo, norint apdoroti duomenis programoje ir pereiti prie duomenų srauto valdymo. Dauguma FP kalbų turi toliau aprašytų funkcijų palaikymą, bet šiuo atveju rašoma apie Scala aukštesnės eilės funkcijas.
Funkcija “map”
def map[B](f: (A) ⇒ B): List[B]
map taiko unarinę (priimčią vieną argumentą) funkciją kiekvienam rinkinio elementui ir visi rezultatai sudaro naują rinkinį iš tiek pat elementų, kaip ir pradinis.
Funkcija “flatten”
def flatten[B]: List[B]
flatten sujungia keletą rinkinių į vieną rinkinį,pvz. dviejų dimensijų sąrašas tampa vienos dimensijos.
Funkcija “flatMap”
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): List[B]
flatMap taiko funkciją, kuri grąžina rinkinį, kiekvienam sąrašo elementui ir taikydama flatten sukuria naują kolekciją.
Funkcija “filter”
def filter(p: (A) ⇒ Boolean): List[A]
filter priima kaip argumentą vieną predikato (tokia, kuri grąžina true / false reikšmę) funkciją. Pagal šią funkciją atliekamas filtravimas ir sukuriamas naujas rinkinys.
Funkcija “foldLeft”
def foldLeft[B](z: B)(f: (B, A) => B): B
foldLeft skiriasi nuo map tuom, kad jai reikia paduoti pradinę reikšmę ir binarinę (kuri priima du argumentus) funkciją. Pirmam veiksmui rinkinyje perduodama pradinė reikšmė ir pirmas elementas. Kitiems elementams gautas rezultatas naudojamas kaip pirmas elementas. foldLeft grąžins vieną reikšmę. Naudojamas trumpinys /:
Pvz.: def reverseFL(str: String): String = (“”/:str)((a, b) => b + a)
Funkcija “foldRight”
def foldRight[B](z: B)(op: ((A, B), B) ⇒ B): B
foldRighti daro tą patį, kaip ir foldLeft tik atvirkčiai, rinkinys pradedamas iteruoti nuo dešinės į kairę ir binarinės funkcijos nariai sukeisti vietomis. Naudojamas trumpinys :\
Pvz.: def reverseFR(str: String): String = (str:\””)((a, b) => b + a)