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)