Scala
Scala
What is Scala?
- Scala stands for Scalable language
- Created by Martin Odersky
- Started in 2001, first released in 2004
- Runs on JVM, the Java Virtual Machine
Install Scala
- On Ubuntu
apt install scala
Editors
- Scala IDE
- sbt - Scala Build Tool
- other IDEs
Everything is an object
Check if Java is installed
java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.10)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.10, mixed mode, sharing)
Scala in Docker
docker build -t scala .
docker run --rm -it -v$(pwd):/opt scala
# java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.10)
OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.10, mixed mode, sharing)
# scala -version
Scala code runner version 2.11.12 -- Copyright 2002-2017, LAMP/EPFL
REPL
- REPL = Read Evaluate Print Loop
$ scala
scala> 23 + 19
res0: Int = 42
scala> :quit
:help
Scala Syntax
- Semicolons (;) are optional at the end of the statement
Hello World in Scala
object HelloWorld {
def main(args:Array[String]) {
println("Hello World!")
}
}
Run Hello World in the REPL
$ scala
scala> :load Hello.scala
scala> Hello.main(null)
scala> Hello.main(Array())
$ scalac HelloWorld.scala
$ scala HelloWorld
Hello World!
object HelloName {
def main(args:Array[String]) {
val name:String = args(0)
println("Hello " + name + "!")
}
}
Run (Shell script)
{% embed include file="src/examples/run.sh)
Hello Name (command line parameters)
$ scalac HelloName.scala
$ scala HelloName Foo
Hello Foo!
var vs val
val
creates an immutable object.
var
create mutable object.
val is immutable
object ValIsImmutable {
def main(args:Array[String]) {
val counter:Int = 0
println(counter)
counter = 1
println(counter)
}
}
ValIsImmutable.scala:5: error: reassignment to val
counter = 1
^
one error found
var is immutable
object VarIsMutable {
def main(args:Array[String]) {
var counter:Int = 0
println(counter)
counter = 1
println(counter)
}
}
0
1
Concatenate strings
object ConcatenateStrings {
def main(args:Array[String]) {
val first:String = args(0)
val second:String = args(1)
println(first + second)
}
}
Add Numbers (convert string to int)
- toInt
object AddNumbers {
def main(args:Array[String]) {
val first:Int = args(0).toInt
val second:Int = args(1).toInt
println(first + second)
}
}
Run with sbt
- Create directory structure:
hello-world/
├── build.sbt
├── project
│ └── build.properties
└── src
└── main
└── scala
└── Main.scala
object Hello {
def main(args:Array[String]) {
//val name:String = args(0)
//println("Hello " + name + "!!")
println("Hello World!")
}
}
Comments
// Single line
/*
Multi line
*/
Scala While loop
object WhileLoop {
def main(args:Array[String]) {
var cnt = 1
while (cnt < 10) {
cnt += 1
println(cnt)
}
println("done")
}
}
Scala For loop
object ForLoop {
def main(args:Array[String]) {
val planets = List("Mercury", "Venus", "Earth", "Mars")
for(name <- planets) println(name)
for(name <- planets) {
println(name)
}
}
}
object ForLoopRange {
def main(args:Array[String]) {
for(i <- 10 to 1 by -1) {
println(i)
}
}
}
Scala show dates
import java.util.Date
import java.util.DateFormat
object PrintDate {
def main(args: Array[String]) {
val now = new Date
println(now)
}
}
More
-
Lengths of array
-
Left facing arrow
<-
object Names {
def main(args:Array[String]) {
val names = List("Foo", "Bar")
//List <String> names = new ArrayList<String>()
println(names)
//names.add("Zorg")
//println(names)
}
}
object Try {
def main(args:Array[String]) {
var counter:Int = 0
println(counter)
counter = 1
}
}