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