Equivalencia desde Kotlin
Comportamiento como valor
DirectaScala 3 permite definir métodos y también tratar funciones como valores. La forma curried separa la entrada del valor de función.
Referencia Kotlin: Declarar una operación reutilizable y recibir otra operación como valor.
- Mecanismo
- Métodos
defy valores de función con el tipoInt => Int. - Idea conservada
- La transformación se recibe como valor y se invoca dos veces sobre el mismo argumento; quien la declara no necesita conocer
applyTwice. - Riesgo de diseño
- Asumir que todo método se comporta como un valor de función sin considerar el contexto de adaptación.
- Recomendación
- Declara el tipo
Int => Intcuando una API necesita recibir explícitamente una función. - Convención del curso
- Declara el tipo de función explícito cuando la API debe recibir una función, no solo un método.
- Mecanismo del lenguaje
- Métodos
defy valores de función con el tipoInt => Int.
Diferencias relevantes
- Un método
defno es exactamente un valor de función hasta que se adapta al contexto requerido. - Los parámetros pueden agruparse en varias listas, como en
applyTwice(value)(transform).
El segundo grupo de parámetros recibe un valor de función.
fun applyTwice(
value: Int,
transform: (Int) -> Int,
): Int = transform(transform(value))
val result = applyTwice(3) { it + 1 } // 5def applyTwice(value: Int)(transform: Int => Int): Int =
transform(transform(value))
val result = applyTwice(3)(_ + 1) // 5Otra forma de recibir comportamiento: un predicado para filtrar una lista.
def keep(xs: List[Int])(p: Int => Boolean) = xs.filter(p)