Методы и функции в 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. Параметры в списке параметров могут разделяться запятыми.
Следующий метод складывает два переданных параметра и возвращает сумму:
Пример
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
Если метод не имеет возвращаемого значения, он может возвращатьUnit, что аналогично Javavoid, как в следующем примере:
Пример
def printMe( ) : Unit = {
println("Hello, Scala!")
}
}
Вызов метода
Scala предоставляет несколько различных способов вызова методов:
Ниже приведён стандартный формат вызова метода:
functionName( 参数列表 )
Если метод вызывается с помощью объекта-экземпляра, можно использовать формат, подобный Java (с использованием.точки):
[instance.]functionName( 参数列表 )
Приведённый выше пример демонстрирует определение и вызов метода:
Пример
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: