Chapter 8. Methods

This final chapter on domain modeling covers methods, which can be defined inside classes, case classes, traits, enums, and objects. An important note—and a big change in Scala 3—is that methods can also be defined outside of those constructs. As a result, a complete Scala 3 application can look like this:

def printHello(name: String) = println(s"Hello, $name")
def printString(s: String) = println(s)

@main def hiMom =
    printHello("mom")
    printString("Look mom, no classes or objects required!")

Scala methods are similar to methods in other typed languages. They’re defined with the def keyword, typically take one or more parameters, have an algorithm that they perform, and return some sort of result. A basic method—one that doesn’t have generic types or using parameters—is defined like this:

def methodName(paramName1: type1, paramName2: type2, ...): ReturnType =
    // the method body
    // goes here

Declaring the method return type is optional, but I find that for maintaining applications I haven’t looked at in months or years, taking a few moments to declare the type now makes it easier to understand days, months, and years from now. When I don’t add the type—or when I use other dynamically typed languages—I find that I have to take a fair amount of time in the future to look through the method body to determine what the return type is, and the longer the method, the longer that takes. So most developers agree that it’s best to declare the return now, while it’s fresh ...

Get Scala Cookbook, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.