Herramientas de usuario

Herramientas del sitio


functional:scala

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
functional:scala [2013/04/04 13:47]
alfred [Montar tests]
functional:scala [2020/05/09 09:25] (actual)
Línea 28: Línea 28:
 } }
 </​code>​ </​code>​
 +  * ''​ctrl+shift+f''​ formatea el código.
 ===== Conceptos ===== ===== Conceptos =====
 ==== Conceptos básicos ==== ==== Conceptos básicos ====
Línea 55: Línea 56:
 } }
 </​code>​ </​code>​
- 
-=== Declaraciones === 
  
  
Línea 149: Línea 148:
   * {{:​functional:​scala:​test_jars.tar.gz|Jars para tests}}   * {{:​functional:​scala:​test_jars.tar.gz|Jars para tests}}
 ==== Funciones y evaluación ==== ==== Funciones y evaluación ====
 +Sintaxis de definición:​
 +<​code>​
 +def nombre (par_name : tipo) : tipo_return = { ... }
 +</​code>​
 +Para indicar en Scala que un parámetro (en este caso el segundo) se evaluará por nombre, haremos:
 +<​code>​
 +def first (x: Double, y: => Double) = x
 +</​code>​
 +
 +=== Diferencia entre evaluación por nombre y por valor ===
 +Teniendo...
 +<code scala>
 +square (x: Double) : Double = x * x
 +sumOfSquares (x: Double, y: Double) : Double = square(x) + square(y)
 +</​code>​
 +Por valor cada argumento se evalua una vez:
 +<​code>​
 +sumOfSquares(3,​ 2+2)
 +sumOfSquares(3,​ 4)
 +square(3) + square(4)
 +3 * 3 + square(4)
 +9 + square(4)
 +9 + 4 * 4
 +9 + 16
 +25
 +</​code>​
 +
 +Por nombre cada argumento se evalua cuando es llamado: ​
 +<​code>​
 +sumOfSquares(3,​ 2+2)
 +square(3) + square(2+2)
 +3 * 3 + square(2+2)
 +9 + square(2+2)
 +9 + (2+2) * (2+2)
 +9 + 4 * (2+2)
 +9 + 4 * 4
 +25
 +</​code>​
 +
 +Si tuviesemos la siguientes expresiones
 +<​code>​
 +def loop () = loop
 +def first (x: Double, y: Double) = x
 +first(x, loop)
 +</​code>​
 +Si evaluamos la tercera por nombre terminaría pero si la evaluamos por valor cae en bucle infinito. \\ 
 +Cuando definimos usando ''​val''​ lo hacemos haciéndolo por valor. Cuando lo hacemos usando ''​def''​ lo hacemos por nombre:
 +<​code>​
 +def loop () : Boolean = loop
 +def x = loop 
 +val x = loop  // bucle infinito
 +</​code>​
 +
 +==== Notas ====
 +  * Cuando tenemos una función recursiva necesitamos indicar su valor devuelto.
  
functional/scala.1365083260.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)