Scala Essentials

chapter, Online, 2016

Scala Essentials


Data Types in Scala

  • A Data type tells the compiler about the type of the value to be stored in a location
  • Scala comes with the following built-in data types which you can use for your Scala variables alt —

    Data Types in Scala (cont’d)

    Few examples alt


Variables Types in Scala

Variables are simply names used to refer to some location in memory – a location that holds a value with which we are working

Scala variables come in two shapes: Values and Variables

Values

Values: Immutable - “val” (Read only)

  • Similar to Java Final Variables
  • Once initialized, Vals can’t be reassigned alt —

    Variables:

    Mutable - “var” (Read-write) - Similar to non-final variables in Java

Here, myVar is declared using the keyword var. This means that it is a variable that can change value and this is called mutable variable alt —

Type Inference :

When you assign an initial value to a variable, the Scala compiler can figure out the type of the variable based on the value assigned to it This is called type inference Once a type is assigned to a variable, it remains same for entire scope alt

Thus, Scala is Statically Typed language


Assigning Block Expression

  • In Java or C++ a code block is a list of statements in curly braces { }
  • In Scala, a { } block is a list of expressions, and result is also an expression
  • The Value of a block is the value of the last expression of it alt —

    Lazy Values

  • One nice feature built into Scala are “lazy val” values.
  • Lazy value initialization is deferred till it’s accessed for first time
  • For example : If you want to read a file abc.txt, if the file is not existing , you will get FileNotFoundException exception alt —
    Lazy Values (cont’d)
  • But if you initialize the value as Lazy, you won’t get this error, because it will delay the initialization till it accesses the file abc.txt alt

  • Lazy values are very useful for delaying costly initialization instructions
  • Lazy values don’t give error on initialization, whereas no lazy value do give error

Check your Understanding

If val a = (1, 2, 4,11, "Robert",5,9,11,2.5 ) then a._5?

  1. No value , its wrong syntax
  2. 5
  3. Nil
  4. “Robert”

Control Structures in Scala

  • Control Structures controls the flow of execution
  • Scala provides various tools to control the flow of program’s execution
  • Some of them are
    if..else
    while
    do-while
    foreach
    for
    

    Control Structures in Scala (cont’d): if-else

    An if statement can be followed by an optional else statement, which executes when the boolean expression is false.

  • if-else syntax in Scala is same as Java or C++
  • In Scala, if-else has a value, of the expression following it
  • Semicolons are optional in Scala alt —

    Control Structures in Scala (cont’d): if-else

    Every expression in Scala has a type. First If statement has a type Int Second statement has a type Any. Type of a mixed expression is supertype of both branches alt


Control Structures in Scala (cont’d): while loop

  • A while loop statement repeatedly executes a target statement as long as a given condition is true
  • In Scala while and do-while loops are same as Java alt —

    Control Structures in Scala (cont’d): do- While Loop

    A do…while loop is similar to a while loop, except that a do…while loop is guaranteed to execute at least one time Syntax: alt —

    Control Structures in Scala (cont’d): foreach Loop

    alt —

    Control Structures in Scala (cont’d): foreach Loop with function

    alt —

    Control Structures in Scala (cont’d): for loop

    for loop can execute a block of code for specific number of times. Scala doesn’t have for (initialize; test; update) syntax

    for( var x <- n ) {
    //Block of statements;
    }
    

    Scala: For Loop : to vs. until

    You can use either the keyword to or until when creating a Range object. The difference is, that to includes the last value in the range, whereas until leaves it out. Here are two examples: alt —

    Check your Understanding

    What is the output of the following program?

    for (x <- 'a' until 'f')
    print(x)
    
    1. Error
    2. abcde
    3. abcdef
    4. None of these

Control Structures in Scala: for Loop (cont’d)

Advanced For Loop: can have multiple generators in for loop alt


Control Structures in Scala: for Loop(cont’d)

We can put conditions in multi generators for loop alt


Control Structures in Scala: for Loop(cont’d)

We can introduce variables in loop! alt


Control Structures in Scala: The for Loop with Yield

If the body of for loop starts with yield, it returns a collection of values

val x = for(i<- 1 to 10) yield i*5

alt —

Functions

A function is a group of statements that together perform a task Scala function is a complete object which can be assigned to a variable The last statement in the function is the return value. You can create functions with “def” keyword

def functionName ([list of parameters]) : [return type] = {
    function body  
    return [expr]
}

alt —

Functions (cont’d)

We can provide defaults to function arguments, which will be used in case no value is provided in function calls alt


Functions (cont’d)

  • We can specify argument names in function calls
  • In named invocations the order of arguments is not necessary
  • We can mix unnamed and named arguments, if the unnamed argument is the first one. We can specify argument names in function calls
  • In named invocations the order of arguments is not necessary
  • We can mix unnamed and named arguments, if the unnamed argument is the first one
  • Scala supports variable number of arguments to a function

    Check your Understanding

    What is the output of the following?

def concatStr(a:String, b:Int=2 , c:String) = {a + b + c}
println(concatStr( "Hi",200, "Welcome"))
  1. Hi2Welocme
  2. Hi200Welcome
  3. Error
  4. Hi2200Welcome

Leave a Comment

Your email address will not be published. Required fields are marked *

Loading...