Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
functional:scala [2013/04/05 17:51] alfred [Funciones y evaluación] |
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 151: | Línea 152: | ||
| def nombre (par_name : tipo) : tipo_return = { ... } | def nombre (par_name : tipo) : tipo_return = { ... } | ||
| </code> | </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 === | === Diferencia entre evaluación por nombre y por valor === | ||
| Teniendo... | Teniendo... | ||
| Línea 185: | Línea 191: | ||
| def loop () = loop | def loop () = loop | ||
| def first (x: Double, y: Double) = x | def first (x: Double, y: Double) = x | ||
| + | first(x, loop) | ||
| </code> | </code> | ||
| - | Si la evaluamos por nombre termina pero si la evaluamos por valor cae en bucle infinito. \\ | + | Si evaluamos la tercera por nombre terminaría pero si la evaluamos por valor cae en bucle infinito. \\ |
| - | Para indicar en Scala que un parámetro (en este caso el segundo) se evaluará por nombre, haremos: | + | Cuando definimos usando ''val'' lo hacemos haciéndolo por valor. Cuando lo hacemos usando ''def'' lo hacemos por nombre: |
| <code> | <code> | ||
| - | def first (x: Double, y => Double) = x | + | def loop () : Boolean = loop |
| + | def x = loop | ||
| + | val x = loop // bucle infinito | ||
| </code> | </code> | ||
| + | |||
| + | ==== Notas ==== | ||
| + | * Cuando tenemos una función recursiva necesitamos indicar su valor devuelto. | ||
| + | |||