Методы и функции в Scala

В Scala есть методы и функции, и семантическая разница между ними очень мала. Методы Scala являются частью класса, тогда как функции — это объекты, которые можно присвоить переменной. Иными словами, функция, определённая внутри класса, является методом.

Методы в Scala похожи на методы Java; методы являются частью класса.

Функции в Scala — это полноценные объекты; фактически функции в Scala являются объектами класса, который наследует Trait.

В Scala используйтеval-инструкцию для определения функции,def-инструкцию для определения метода.

class Test{
  def m(x: Int) = x + 3
  val f = (x: Int) => x + 3
}

Примечание:В некоторых переводах функция и метод не различаются.


Объявление метода

Формат объявления метода в Scala следующий:

def functionName ([参数列表]) : [return type]

Если вы не пишете знак равенства и тело метода, то метод неявно объявляется какabstract, и тип, содержащий его, следовательно, также является абстрактным типом.


Определение метода

Определение метода начинается с ключевого словаdef, за которым следует необязательный список параметров, двоеточие:и возвращаемый тип метода, знак равенства=и, наконец, тело метода.

Формат определения метода в Scala следующий:

def functionName ([参数列表]) : [return type] = {
   function body
   return [expr]
}

В приведённом выше кодевозвращаемый типможет быть любым допустимым типом данных Scala. Параметры в списке параметров могут разделяться запятыми.

Следующий метод складывает два переданных параметра и возвращает сумму:

Пример

object add{
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b

      return sum
   }
}

Если метод не имеет возвращаемого значения, он может возвращатьUnit, что аналогично Javavoid, как в следующем примере:

Пример

object Hello{
   def printMe( ) : Unit = {
      println("Hello, Scala!")
   }
}

Вызов метода

Scala предоставляет несколько различных способов вызова методов:

Ниже приведён стандартный формат вызова метода:

functionName( 参数列表 )

Если метод вызывается с помощью объекта-экземпляра, можно использовать формат, подобный Java (с использованием.точки):

[instance.]functionName( 参数列表 )

Приведённый выше пример демонстрирует определение и вызов метода:

Пример

object Test {
   def main(args: Array[String]) {
        println( "Returned Value : " + addInt(5,7) );
   }
   def addInt( a:Int, b:Int ) : Int = {
      var sum:Int = 0
      sum = a + b

      return sum
   }
}

После выполнения вышеуказанного кода вывод будет следующим:

$ scalac Test.scala 
$ scala Test
Returned Value : 12

Scala также является функциональным языком, поэтому функции — ядро языка Scala. Следующие концепции функций помогут нам лучше понять программирование на Scala:

Анализ концепции функций и примеры
Вызов функции по имени Указание имён параметров функции
Функции - аргументы переменной длины Рекурсивные функции
Значения параметров по умолчанию Функции высшего порядка
Вложенные функции Анонимные функции
Частично применённые функции Каррирование функций
Другие расширения