Now that we can use REPL, let's understand the base Scala syntax. For now, it's not necessary to learn it in detail, but let's get familiar with it by using an example.
For a formal, detailed description, refer to the SLS: Scala Language Specification here: http://scala-lang.org/files/archive/spec/2.12/.
Scala compilation unit – This is a set of definitions inside an entity (template-entity), which can be an object, a class, or a trait. We will speak about the Object-Oriented part of the Scala language in detail later. Now, let's look at the basic syntax. Let's define some classes in REPL:
> class X { def f():Int = 1 } > Class X defined // answer in REPL
Definitions inside the entity can be nested entities, functions, or values:
> def f():Int = 1
Here, the function
f
is defined, returning
1
. We will talk about this function in detail in
Chapter 3,
Functions. Now, let's stay on the top-level view:
> val x = 1
Here, the value
x
is defined with value
1
:
> var y = 2
Here, the mutable variable
y
is defined with value
2
.
Other high-level entities include objects and traits. We can create objects by writing object or trait definitions:
> object O { def f():Int =1 } > trait O { def f():Int =1 }
We will talk about classes, objects, and traits in the next chapter.
Now, let's look at defining an object in REPL with the name ZeroPoint.
Steps for Completion:
Scala is an expression-based language, which means that everything is an expression (in the right-hand side of function and value/variable definitions).
Some of the base expressions are:
f(x, y)
.x + y
.!x
new x
creates an instance of class x.y = 3
: Assigns a value of 3
to y
.x = 3
: This is a compiler error, and a value can't be assigned.{ A; B }
The value
of a block expression is the last expression. Note that
;
can be omitted if
A
and
B
are situated on different lines. The syntax for this is shown as follows:
{ A B }
The preceding syntax will have the same output as
{ A; B }
.
if
statement:> if (1 == 1) "A" else "B" - let's eval one in REPL
> x match { case "Jon" => doSomethingSpecialForJon() case "Joe" => doSomethingSpecialForJoe() case _ => doForAll() }
while
/do
var i=0 var s=0 while(i < 10) { s = s+i i = i +1 }
Do
/while
Foreach
, for
Shortcuts for height-order functions will be described in detail in, Chapter 4, Scala Collections.
We'll look at defining a main function which prints something onscreen and calls the main function.
project1
. If you haven't, import it into the IDE.main
method.The full method should look something like this:
object Chatbot1 {def printHello():Unit = { println("Hello")}def main(args: Array[String]): Unit = { printHello() … // unchanged code here } }