Basics

Scala supports REPL (Read Evaluate Print Loop) interactive shell

scala> val x:Int = 100
x: Int = 100
scala> val x = 100
x: Int = 100
scala> val y:Double = 12.90
y: Double = 12.9
scala> val str :String ="Hello"
str: String = Hello
scala> val ch:Char ='I'
ch: Char = I
scala> val a:Int = ch
a: Int = 73
scala> val a:Int = 'a'
a: Int = 97
scala> val d = 123.45
d: Double = 123.45
scala> val i:Int = d
<console>:11: error: type mismatch;
 found : Double
 required: Int
 val i:Int = d
 ^
scala> val i:Int = d.toInt
i: Int = 123

scala> val l:Long = 1000
l: Long = 1000

scala> val i:Int = l.toInt
i: Int = 1000

scala> val x = 10
x: Int = 10

scala> val y = 15
y: Int = 15

scala> x<y
res101: Boolean = true

scala> val d = 90.34
d: Double = 90.34

scala> d.getClass()
res102: Class[Double] = double

Tuples

scala> val info = (101,"Amar",24,50000)
info: (Int, String, Int, Int) = (101,Amar,24,50000)
scala> info._1
res103: Int = 101
scala> info._4
res104: Int = 50000

Blocking Statements

scala> var x ={
 | val a = 10
 | val b = a+10
 | b
 | }
x: Int = 20

Conditional Operators

scala> val a = 10
a: Int = 10
scala> val b = 15
b: Int = 15
scala> val big = if (a>b) a else b
big: Int = 15
scala> val c = 12
c: Int = 12
scala> val big = if(a>b) if(a>c) a else c else if(b>c) b else c
big: Int = 15
scala> val big = a>b match {
 | case true => a
 | case false => b
 | }
big: Int = 15
scala> val big = a>b match {
 | case true => if(a>c) a else c
 | case false => if(b>c) b else c
 | }
big: Int = 15
scala> val status = 3
status: Int = 3
scala> val stat = status match{
 | case 0 => "Single"
 | case 1 => "Married"
 | case 2 => "Divorced"
 | case 3 => "Widowed"
 | case other => "Invalid"
 | }
stat: String = Widowed
scala> val d = "wed"
d: String = wed
scala> val dtype = d match{
 | case "mon" | "tue" | "wed" | "thu" | "fri" => "Working day"
 | case other => "weekend"
 | }
dtype: String = Working day

Loops

scala> for (x<- 1 to 10)
 | println(x)
1
2
3
4
5
6
7
8
9
10
scala> var tot = 0
tot: Int = 0
scala> for (x<- 1 to 10)
 | tot += x
scala> tot
res107: Int = 55
scala> for (x<- 1 to 7)
 | println(s"Day $x")
Day 1
Day 2
Day 3
Day 4
Day 5
Day 6
Day 7

Yield

scala> for (x<- 1 to 7)
 | yield(s"Day $x")
res109: scala.collection.immutable.IndexedSeq[String] = Vector(Day 1, Day 2, Day 3, Day 4, Day 5, Day 6, Day 7)

While

scala> var x=10
x: Int = 10
scala> while (x>0) {
 | println(x)
 | x-=1
 | }
10
9
8
7
6
5
4
3
2
1

Functions

scala> def samp:String = "Sampling"
samp: String
scala> samp
res111: String = Sampling
scala> samp()
<console>:12: error: not enough arguments for method apply: (index: Int)Char in class StringOps.
Unspecified value parameter index.
 samp()
 ^
scala> def samp(x:Int) : Int =
 | {
 | x + 10
 | x + 20
 | }
samp: (x: Int)Int
scala> samp(20)
res113: Int = 40

Passing multiple values

scala> def multiplate(x:Int, y:Int) : Int =
 | {
 | x*y
 | }
multiplate: (x: Int, y: Int)Int
scala> multiplate(20,30)
res114: Int = 600
scala> multiplate(x=20,y=30)
res115: Int = 600
scala> multiplate(y=30,x=20)
res116: Int = 600

Recursive functions

scala> def power(x:Int, n:Int) : Int =
 | {
 | if(n>=1) x*power(x,n-1) else 1
 | }
power: (x: Int, n: Int)Int
scala> power(10,0)
res117: Int = 1
scala> power(10,3)
res118: Int = 1000