scala
Objects in Scala
• The main way to create an object in Sclaa is to instantiate a class, like in java.• There's also syntax to create objects right then and there
• Objects are by default lazy—Never used => never created
Object example in Scala:
(creating unique account nums starting from 2100000 at various places in the relative app)1
2
3
4
5
object Acconuts:
private var accountNumber = 2100000
def newUniqueAccNumber()=
accountNumber += 1
accountNumber
Using objects in Scala:
1
2
3
Accounts.newUniqueAccNumber() // 2100001
Accounts.newUniqueAccNumber() // 2100002
Accounts.newUniqueAccNumber() // 2100003
Static Fields and Methods
• In java, static variables and method sare shared by all instances of the class of which they belong• Scala does this same function using companion objcts
Static example in java:
1
2
3
4
5
6
7
8
9
10
11
public class Person{
public static int numberOfPeople;
public static int getNumOfPeople(){
return Person.numberOfPeople;
}
public person(){
numberOfPeople++;
}
}
You see, this is pretty shit. Scala does this more elegantly
Static example in Scala using "companion objects"
• companion objects are objects that have the same name as another class, and are defined in the same fileCompanion object example:
Person class:1
2
class person(val name: String):
person.incrementNumPeople // constructor just calls incrememnt method on companion object
companion object for person class (is a replacement for static in java)
1
2
3
4
object Person:
var numofPeople = 0
private def incrmementNumPeople = numOfPeople =+ 1
def conut = numOfPeople
usage:
1
2
3
var p1 = Person("Jake")
var p2 = Person("Yosra")
println(s"count: #{Person.count}") //outputs 2
Apply Method in Scala
• vv importantBasic Example:
We can create objects like this:1
val foo = new Foo
Treating foo like a function...
1
foo()
- This should cause an error in Java, but not in Scala!!
- Scala will look for an apply method to activate
- if there's no apply, you'll get a syntax error
foo obj:
1
2
def foo:
def apply() println(s"foo being foo")
Another example:
1
2
3
object Greet:
def apply(val name: String) =
println(s"gm {name}")
proxying the companion object
1
2
3
4
5
class City(val name: String) //class
object City: //companion object
def apply(name: String)
new City(name)
New "city" object will appear if you change the following:
1
City("dublin")