🎓 A1Learner
🔍
0 of 48 lessons completed

Scala Organizing Code

Organizing code is grouping related definitions under one name. The group name keeps related pieces together and easy to find.

A nested object groups a class under one name

Circle lives inside shapes. The dotted name shapes.Circle reaches it, and its area prints.

object shapes:
  class Circle(val r: Double):
    def area: Double = 3.14 * r * r
@main def main(): Unit =
  val c = shapes.Circle(2.0)
  println(c.area)

A nested object groups functions too

Both greetings live inside greeter. Each one is called with its dotted name.

object greeter:
  def hello(name: String): String = "Hello, " + name
  def goodbye(name: String): String = "Goodbye, " + name
@main def main(): Unit =
  println(greeter.hello("Ana"))
  println(greeter.goodbye("Ana"))

An export re-exposes a grouped name

Tools exports shapes.Circle. The circle is now reachable as tools.Circle too.

object shapes:
  class Circle(val r: Double):
    def area: Double = 3.14 * r * r
object tools:
  export shapes.Circle
@main def main(): Unit =
  val c = tools.Circle(1.0)
  println(c.area)

Example

object shapes:
  class Circle(val r: Double):
    def area: Double = 3.14 * r * r
  class Square(val side: Double):
    def area: Double = side * side
object tools:
  export shapes.Circle
  export shapes.Square
@main def main(): Unit =
  println(tools.Circle(2.0).area)
  println(tools.Square(3.0).area)
  println(shapes.Circle(1.0).area)

Key points

  • Nested object: an object inside a program groups classes and functions under one name.
  • Dotted use: a grouped definition is used with a dot, like shapes.Circle.
  • Export: an export inside an object re-exposes a grouped name under the new object.
  • Package: in a real project, a package line at the top of a file names the folder the file lives in.
  • One group one job: each group holds definitions for one job, not everything in the program.

In this example, shapes groups Circle and Square together. Tools exports both names, so they are reachable as tools.Circle and tools.Square. The original dotted name shapes.Circle still works as well.

Note

nested objects group code without a package line.

Try it Yourself

Edit the code, then press Run.

Running is simulated · Scastie

Exercise

How do you use a class grouped inside object shapes?