Skip to content

Commit 0ec83ae

Browse files
committed
#24 - Kotlin
1 parent 79dc90a commit 0ec83ae

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Decoradores en Kotlin (Versión simplificada)
3+
*
4+
* Los decoradores son un patrón de diseño estructural que permite añadir
5+
* nuevas funcionalidades a objetos existentes sin alterar su estructura.
6+
* En Kotlin, podemos implementar decoradores de manera sencilla utilizando
7+
* funciones de orden superior.
8+
*
9+
* En esta implementación, nos centraremos en decorar funciones específicas
10+
* en lugar de intentar crear un decorador genérico para cualquier tipo de función.
11+
*/
12+
13+
// Función que queremos decorar
14+
fun operation(x: Int, y: Int): Int = x + y
15+
16+
// Decorador simple
17+
fun decorateOperation(func: (Int, Int) -> Int, before: () -> Unit, after: () -> Unit): (Int, Int) -> Int {
18+
return { x, y ->
19+
before()
20+
val result = func(x, y)
21+
after()
22+
result
23+
}
24+
}
25+
26+
// Decorador para contar llamadas a función
27+
fun countCallsOperation(func: (Int, Int) -> Int): (Int, Int) -> Int {
28+
var count = 0
29+
return { x, y ->
30+
count++
31+
println("La función ha sido llamada $count veces")
32+
func(x, y)
33+
}
34+
}
35+
36+
fun main() {
37+
// Ejemplo de uso del decorador simple
38+
val decoratedOperation = decorateOperation(
39+
::operation,
40+
before = { println("Antes de la operación") },
41+
after = { println("Después de la operación") }
42+
)
43+
44+
println("Resultado: ${decoratedOperation(5, 3)}")
45+
46+
// Ejemplo de uso del decorador que cuenta llamadas
47+
val countedOperation = countCallsOperation(::operation)
48+
49+
repeat(3) {
50+
println("Resultado: ${countedOperation(it, it + 1)}")
51+
}
52+
}

0 commit comments

Comments
 (0)