Sunday, December 15, 2019

4. SCALA : Functional Programming

4. SCALA : Functional Programming



Higher order function.: If one function takes another function as parameter => we call 


webconsole
spark2-shell

//pass function at run time, runtime we will decide
def sum(fun:Int=>Int, a:Int, b:Int)
:Int={

if(a == b){
fun(a)
}
else{
fun(a) + sum(fun,a+1,b)
}

}


def firstPower(input:Int):Int= {Input}


sum(firstPower,1,3)

// O/p = 6

def secondPower(input : Int):Int={Input * Input}

sum(secondPower,1,3)

// o/p = 14

Anonymous function (Same as above but its Anonymous)
-----------------------


sum(x => x, 1,3)

sum(x => x * x, 1,3)

sum(x => x * x * x, 1,3)

Higher order function examples (map is higher order func takes func as 

map (higher order function - means takes function as input parameter)
--------------------------------
var arr = Array("pavan","madhu","amar")

arr.map(x => x.length() ).foreach(println)
arr.map(x => x.trim() ).foreach(println)
arr.map(x => x.replace(" ","") ).foreach(println)

//depending true/false it will filter
Array(1,2,3,4,5).filter(x => x%2 == 0).foreach(pritnln)
2
4


Array(1,2,3,4,5).map(x => x*x).foreach(pritnln)
1 4 9 16 25


Reduce - HOF (Again higher order function - means takes function as input parameter)
1 2 3 4 5
x y x+y

1  2 = 3
3  3 = 6
6  4 = 10
10 5 = 15

println(Array(1,2,3,4,5).reduce((x,y) => x+y)))
println(Array(1,2,3,4,5).reduce((x,y) => scala.math.max(x,y)))
5


FlatMap (HOF)
#####################

Takes func as input
return Array

FlatMap - convert them in to individual item

var arr = Array("pavan","madhu","amar")
arr.flatMap(x => x).foreach(println)
p
a
v
a
n

m
a
d
h
u

a
m
a
r

var arr = Array("pavan malatkar","madhu hiraskar","amar ganapathi")
arr.flatMap(x => x.split(" ")).foreach(println)

pavan
malatkar
madhu
hiraskar
amar
ganapathi


arr.flatMap(x => x).foreach(println)  -> Here x is returning as it is, but flatMap will do it as individual char
arr.flatMap(x => x.split(" ")).foreach(println)  -> Here it is not returning simply x, we have overriden logic to do split 















No comments:

Post a Comment