The REPL, scala-cli & Your First Program

Useful commands: :type expr, :doc, :imports, :load file.scala, :reset, :quit.

3.1 The REPL

Useful commands: :type expr, :doc, :imports, :load file.scala, :reset, :quit.

$ scala
scala> 1 + 2
val res0: Int = 3
scala> val name = "Scala"
val name: String = Scala
scala> :type name
String
scala> :help
scala> :quit

3.2 Hello World (Scala 3)

With arguments:

@main def hello(): Unit =
  println("Hello, World!")
scala run hello.scala
@main def greet(name: String, times: Int): Unit =
  for _ <- 1 to times do println(s"Hello, $name!")
scala run greet.scala -- Ann 3

3.3 Hello World (Scala 2 style — still valid)

Also: object Hello extends App { println("Hi") } (Scala 2; discouraged in Scala 3).

object Hello {
  def main(args: Array[String]): Unit = {
    println("Hello, World!")
  }
}

3.4 scala-cli scripts with dependencies

.sc files are scripts: top-level statements run directly.

//> using scala 3.7
//> using dep com.lihaoyi::os-lib:0.11.3
//> using dep com.lihaoyi::upickle:4.1.0

@main def run(): Unit =
  val files = os.list(os.pwd).map(_.last)
  println(upickle.default.write(files))
scala run script.scala
scala test .           # run tests
scala package . --assembly   # fat JAR
scala --power package . --native-image   # GraalVM native image

3.5 Comments

// single-line comment
/* multi-line
   comment */
/** Scaladoc comment
  * @param x description
  * @return description
  */