Scala Tutorial
What is Scala ?
- Functional Programming (treats computation as the evaluation of mathematical functions and avoids state and mutable data)
- Pure Object oriented
- Supports Java Library / Framework Ecosystem
- It cuts down on boilerplate, so programmers can concentrate on the logic of their problems.
To get data from url :
Source.fromURL(url, "UTF-8").mkString
- It adds expressiveness, by tightly fusing object-oriented and functional programming concepts in one language.Functional vs Object Oriented Programming
- It protects existing investments by running on the Java Virtual Machine and interoperating seamlessly with Java.
apply : Function is an Object with an apply method
Object Hello {
def apply(s:String) = "Hello" + world}
println (Hello("world"))
named : normal way of creating functions
def sum(x:Int,y:Int):Int = { x+y }
literal : Functions can be assigned to variable
val add_one = (x:Int) => x+1
add_one(3) // 4
// Turning existing functions into literals
val p = print _ // _ is something like we dont actually whatsoever value is
p("Hi")
// if you want to restrict your params
val add_one:(Int) => Int = (x) => x + 1 // defines that it takes int and returns Int
Partial functions : not all parameters info is provided
val add_one = sum(1,_:Int)
add_one(5) // gives 6
curried functions http://en.wikipedia.org/wiki/Currying
vall addition = (sum _).curried // applies arguments in a sequence
addition(5)(1)
Higher-order functions : functions that take functions as parameterhttp://en.wikipedia.org/wiki/Higher-order_function
// twice(f, 7) = f(f(7)) = (7 + 3) + 3.
def f(x):
return x + 3
def twice(function, x):
return function(function(x))
print(twice(f, 7))
####Pattern Matching :
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
whats the big deal ? . we can do the same with switch in java
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html</pre>
Match on Class Instances
var play = sport("cricket")
play match{
case sport("football") => println("im playing football")
case sport("cricket") => println("im playing cricket")
case sport(_) => println("im unsure")
}
Match on Regular Expressions
// val vs var
val cricket ="^c.*"
val football = "^f.*"
val sport = "cricket"
sport match{
case cricket : pl("playing cricket")
case football : pl("playing football")
case _ : pl ("xxx")
}
http://kerflyn.wordpress.com/2011/02/14/playing-with-scalas-pattern-matching/
Scala Closures http://www.tutorialspoint.com/scala/scala_closures.htm
Object : object in scala is like the static portion of class in java. https://code.google.com/p/moviehub/source/browse/src/com/prashanth/test/MovieTesting.scala
Class http://www.tutorialspoint.com/scala/scala_classes_objects.htm
Generics:
class Stack[T]
{
private val list = new List [T]
def pop : T ={ }
def peek : T = { }
}
Covariant +T (Accepts any type that is sub class of T)
Contravariant -T (Accepts any type that is super class of T)