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.
¿Como declarar un argumento By-Name?
Para declarar un argumento By-Name debes agregar «=>» después del nombre del argumento.
¿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.