Sunday, 23 October 2016

Learn more on Scala Types : Overriding the Default Numeric Types : Day 3 Learnings

Overriding the Default Numeric Types

Scala automatically assigns types to numeric values when you assign them, and you need to override the default type it assigns as you create a numeric field

If you assign 1 to a variable, Scala assigns it the type Int :
scala> val a = 1
a: Int = 1

The following examples show one way to override simple numeric types:

scala> val a = 1d
a: Double = 1.0

scala> val a = 1f
a: Float = 1.0

scala> val a = 1000L
a: Long = 1000


Another approach is to annotate the variable with a type, like this:

scala> val a = 0: Byte
a: Byte = 0

scala> val a = 0: Int
a: Int = 0

scala> val a = 0: Short
a: Short = 0

scala> val a = 0: Double
a: Double = 0.0

scala> val a = 0: Float
a: Float = 0.0


Spacing after the colon isn’t important, so you can use this format, if preferred: val a = 0:Byte

According to the Scala Style Guide, those examples show the preferred style for annotating types, but personally I prefer the following syntax when assigning types to variables, specifying the type after the variable name:

scala> val a:Byte = 0
a: Byte = 0

scala> val a:Int = 0
a: Int = 0


You can create hex values by preceding the number with a leading 0x or 0X , and you can store them as an Int or Long :

scala> val a = 0x20
a: Int = 32

// if you want to store the value as a Long
scala> val a = 0x20L
a: Long = 32


It’s helpful to know about this approach when creating object instances. The general syntax looks like this:

// general case
var [name]:[Type] = [initial value]

// example
var a:Short = 0

This form can be helpful when you need to initialize numeric var fields in a class:

class Foo {
      var a: Short = 0   // specify a default value
       var b: Short = _   // defaults to 0
}

As shown, you can use the underscore character as a placeholder when assigning an initial value. This works when creating class variables, but doesn’t work in other places, such as inside a method. For numeric types this isn’t an issue - you can just assign the
type the value zero - but with most other types, you can use this approach inside a method:

var name = null.asInstanceOf[String]

Better yet, use the Option / Some / None pattern. It helps eliminate null values from your code, which is a very good thing. You’ll see this pattern used in the best Scala libraries and frameworks, such as the Play Framework.


Share this article with your friends.
Related Posts Plugin for WordPress, Blogger...