Scala - Funções
Uma função é um grupo de instruções que executam uma tarefa. Você pode dividir seu código em funções separadas. Como você divide seu código entre as diferentes funções é com você, mas logicamente, a divisão geralmente é para que cada função execute uma tarefa específica.
Scala tem funções e métodos e usamos os termos método e função alternadamente, com uma pequena diferença. Um método Scala é uma parte de uma classe que possui um nome, uma assinatura, opcionalmente algumas anotações e algum bytecode onde uma função em Scala é um objeto completo que pode ser atribuído a uma variável. Em outras palavras, uma função, que é definida como membro de algum objeto, é chamada de método.
Uma definição de função pode aparecer em qualquer lugar em um arquivo de origem e Scala permite definições de função aninhadas, ou seja, definições de função dentro de outras definições de função. O ponto mais importante a se notar é que o nome da função Scala pode ter caracteres como +, ++, ~, &, -, -, \, /,:, etc.
Declarações de função
Uma declaração de função Scala tem o seguinte formato -
def functionName ([list of parameters]) : [return type]
Os métodos são declarados implicitamente abstratos se você não usar o sinal de igual e o corpo do método.
Definições de função
Uma definição de função Scala tem a seguinte forma -
Sintaxe
def functionName ([list of parameters]) : [return type] = {
function body
return [expr]
}
Aqui, return type pode ser qualquer tipo de dados Scala válido e list of parametersserá uma lista de variáveis separadas por vírgula e a lista de parâmetros e o tipo de retorno são opcionais. Muito semelhante ao Java, umreturndeclaração pode ser usada junto com uma expressão caso a função retorne um valor. A seguir está a função que adicionará dois inteiros e retornará sua soma -
Sintaxe
object add {
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
Uma função que não retorna nada pode retornar um Unit isso é equivalente a voidem Java e indica que a função não retorna nada. As funções que não retornam nada no Scala, são chamadas de procedimentos.
Sintaxe
Aqui está a sintaxe -
object Hello{
def printMe( ) : Unit = {
println("Hello, Scala!")
}
}
Funções de chamada
Scala fornece uma série de variações sintáticas para invocar métodos. A seguir está a maneira padrão de chamar um método -
functionName( list of parameters )
Se uma função está sendo chamada usando uma instância do objeto, então usaríamos notação de ponto semelhante a Java da seguinte maneira -
[instance.]functionName( list of parameters )
Experimente o programa de exemplo a seguir para definir e chamar a mesma função.
Exemplo
object Demo {
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
}
}
Salve o programa acima em Demo.scala. Os seguintes comandos são usados para compilar e executar este programa.
Comando
\>scalac Demo.scala
\>scala Demo
Resultado
Returned Value : 12
As funções do Scala são o coração da programação do Scala e é por isso que o Scala é considerado uma linguagem de programação funcional. A seguir estão alguns conceitos importantes relacionados às funções Scala que devem ser compreendidos por um programador Scala.
Funções Call-by-Name | Funções com argumentos nomeados |
Função com argumentos variáveis | Funções de recursão |
Valores de parâmetro padrão | Funções de ordem superior |
Funções Aninhadas | Funções anônimas |
Funções parcialmente aplicadas | Funções de Currying |