Scala 3 — Book

Hello, World!

Language

Hint: in the following examples try picking your preferred Scala version.

Your First Scala Program

A Scala “Hello, World!” example goes as follows. First, put this code in a file named hello.scala:

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

In this code, we defined a method named main, inside a Scala object named hello. An object in Scala is similar to a class, but defines a singleton instance that you can pass around. main takes an input parameter named args that must be typed as Array[String], (ignore args for now).

@main def hello() = println("Hello, World!")

In this code, hello is a method. It’s defined with def, and declared to be a “main” method with the @main annotation. It prints the "Hello, World!" string to standard output (STDOUT) using the println method.

Next, compile the code with scalac:

$ scalac hello.scala

If you’re coming to Scala from Java, scalac is just like javac, so that command creates several files:

$ ls -1
hello$.class
hello.class
hello.scala
$ ls -1
hello$package$.class
hello$package.class
hello$package.tasty
hello.scala
hello.class
hello.tasty

Like Java, the .class files are bytecode files, and they’re ready to run in the JVM.

Now you can run the hello method with the scala command:

$ scala hello
Hello, World!

Assuming that worked, congratulations, you just compiled and ran your first Scala application.

More information about sbt and other tools that make Scala development easier can be found in the Scala Tools chapter.

Ask For User Input

In our next example let’s ask for the user’s name before we greet them!

There are several ways to read input from a command-line, but a simple way is to use the readLine method in the scala.io.StdIn object. To use it, you need to first import it, like this:

import scala.io.StdIn.readLine

To demonstrate how this works, let’s create a little example. Put this source code in a file named helloInteractive.scala:

import scala.io.StdIn.readLine

object helloInteractive {

  def main(args: Array[String]) = {
    println("Please enter your name:")
    val name = readLine()

    println("Hello, " + name + "!")
  }

}
import scala.io.StdIn.readLine

@main def helloInteractive() =
  println("Please enter your name:")
  val name = readLine()

  println("Hello, " + name + "!")

In this code we save the result of readLine to a variable called name, we then use the + operator on strings to join "Hello, " with name and "!", making one single string value.

You can learn more about using val by reading Variables and Data Types.

Then compile the code with scalac:

$ scalac helloInteractive.scala

Then run it with scala helloInteractive, this time the program will pause after asking for your name, and wait until you type a name and press return on the keyboard, looking like this:

$ scala helloInteractive
Please enter your name:
▌

When you enter your name at the prompt, the final interaction should look like this:

$ scala helloInteractive
Please enter your name:
Alvin Alexander
Hello, Alvin Alexander!

A Note about Imports

As you saw in this application, sometimes certain methods, or other kinds of definitions that we’ll see later, are not available unless you use an import clause like so:

import scala.io.StdIn.readLine

Imports help you write code in a few ways:

  • you can put code in multiple files, to help avoid clutter, and to help navigate large projects.
  • you can use a code library, perhaps written by someone else, that has useful functionality
  • you can know where a certain definition comes from (especially if it was not written in the current file).

Contributors to this page: