Métodos y funciones de Scala

Scala tiene métodos y funciones, con una diferencia semántica muy pequeña entre ambos. Los métodos de Scala son parte de una clase, mientras que una función es un objeto que puede asignarse a una variable. En otras palabras, una función definida dentro de una clase es un método.

Los métodos en Scala son similares a los de Java; los métodos son parte de una clase.

Las funciones en Scala son objetos completos; de hecho, una función en Scala es un objeto de una clase que hereda de un Trait.

En Scala se utilizavalla sentencia puede definir funciones,defy la sentencia define métodos.

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

Nota:En algunas traducciones, función (function) y método (method) no se distinguen.


Declaración de métodos

El formato de declaración de métodos en Scala es el siguiente:

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

Si no escribes el signo igual ni el cuerpo del método, el método se declara implícitamente comoabstracto, y el tipo que lo contiene también es un tipo abstracto.


Definición de métodos

La definición de un método comienza con unadefpalabra clave, seguida de una lista de parámetros opcional, dos puntos:el tipo de retorno del método, un signo igual=, y finalmente el cuerpo del método.

El formato de definición de métodos en Scala es el siguiente:

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

En el código anterior,return typepuede ser cualquier tipo de dato válido de Scala. Los parámetros en la lista de parámetros pueden separarse con comas.

La función del siguiente método es sumar dos parámetros pasados y devolver el total:

Ejemplo

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

      return sum
   }
}

Si el método no tiene valor de retorno, puede devolverUnit, lo que es similar alvoidde Java. Ejemplo:

Ejemplo

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

Llamada a métodos

Scala ofrece varias formas diferentes de llamar a métodos:

El siguiente es el formato estándar para llamar a un método:

functionName( 参数列表 )

Si el método se llama mediante un objeto instanciado, podemos usar un formato similar al de Java (usando.el punto):

[instance.]functionName( 参数列表 )

El ejemplo anterior demuestra la definición y la llamada de métodos:

Ejemplo

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
   }
}

Al ejecutar el código anterior, el resultado es:

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

Scala también es un lenguaje funcional, por lo que las funciones son el núcleo del lenguaje Scala. Los siguientes conceptos de funciones nos ayudan a comprender mejor la programación en Scala:

Análisis de conceptos de funciones y casos
Llamada por nombre de funciones (Call-by-Name) Especificar nombres de parámetros de funciones
Funciones: parámetros variables Funciones recursivas
Valores de parámetros por defecto Funciones de orden superior
Funciones anidadas Funciones anónimas
Funciones parcialmente aplicadas Currificación de funciones (Function Currying)
Otras extensiones