#Kata By-Val y By-Name parameters en Scala.

En este post te voy a explicar la diferencia entre los parámetros By-Val y los By-Name en Scala.

Antes de empezar.

En Scala todos los  parámetros son evaluados By-Val por defecto. Esto significa que son evaluados una vez, cuando el parámetro es pasado a la función. Los parámetros By-Name son evaluados en el cuerpo de la función, si y solo si, son usados.

No confundas el asignar los nombres de parámetros para cambiar el orden o cantidad de argumentos en la función. Eso es otra cosa.

¿Como declarar un argumento By-Val?.

No tienes que hacer nada para declarar argumentos By-Val, la declaración actual.

object MyObject {
def byValMethod(byValArgument:Int): Unit = {
}
}
view raw byVal1.sc hosted with ❤ by GitHub

¿Como declarar un argumento By-Name?

Para declarar un argumento By-Name debes agregar «=>» después del nombre del argumento.

object MyObject {
def byNameMethod(byNameArgument: => Int): Unit = {
}
}
view raw byVal2.sc hosted with ❤ by GitHub

¿Cuándo debo utilizar By-Name?

La respuesta es: cuando el argumento sea muy costoso de  evaluar o requiera ser evaluado con cada llamada. No hay una respuesta exacta, todo depende del contexto.

Ejemplo:

Producir un ejemplo que muestre la diferencia entre By-Val y By-Name es difícil, la diferencia no se nota. Todos los ejemplos, y el mío, emplean nanoTime para mostrar como un valor es evaluado, una vez con val y N veces con name.

import java.lang.System._
object MyObject {
def byValMethod (argument:Long): Unit = {
println(s"Calling By-Value: $argument")
println(s"Calling By-Value: $argument")
}
def byNameMethod(argument: => Long): Unit = {
println(s"Calling By-Name: $argument")
println(s"Calling By-Name: $argument")
}
}
MyObject.byValMethod(nanoTime())
MyObject.byNameMethod(nanoTime())
view raw byVal3.sc hosted with ❤ by GitHub

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer