Skip to content

Commit 392b6e6

Browse files
authored
Merge pull request mouredev#5977 from eulogioep/main
#23 - Kotlin
2 parents 061ae05 + e52554d commit 392b6e6

File tree

3 files changed

+194
-0
lines changed

3 files changed

+194
-0
lines changed
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Ejemplo genérico de Singleton
2+
object Singleton {
3+
init {
4+
println("Singleton inicializado")
5+
}
6+
7+
fun doSomething() {
8+
println("Singleton está haciendo algo")
9+
}
10+
}
11+
12+
// Ejemplo de la dificultad extra: Sesión de usuario
13+
object UserSession {
14+
private var userId: Int? = null
15+
private var username: String? = null
16+
private var name: String? = null
17+
private var email: String? = null
18+
19+
fun setUser(id: Int, username: String, name: String, email: String) {
20+
this.userId = id
21+
this.username = username
22+
this.name = name
23+
this.email = email
24+
println("Usuario asignado a la sesión")
25+
}
26+
27+
fun getUserData(): Map<String, Any?> {
28+
return mapOf(
29+
"id" to userId,
30+
"username" to username,
31+
"name" to name,
32+
"email" to email
33+
)
34+
}
35+
36+
fun clearSession() {
37+
userId = null
38+
username = null
39+
name = null
40+
email = null
41+
println("Sesión borrada")
42+
}
43+
}
44+
45+
fun main() {
46+
// Uso del Singleton genérico
47+
println("Usando el Singleton genérico:")
48+
Singleton.doSomething()
49+
Singleton.doSomething()
50+
51+
println("\nUsando el UserSession:")
52+
// Uso del UserSession
53+
UserSession.setUser(1, "eulogioep", "Eulogio EP", "[email protected]")
54+
println("Datos del usuario: ${UserSession.getUserData()}")
55+
UserSession.clearSession()
56+
println("Datos después de borrar: ${UserSession.getUserData()}")
57+
}
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+
}

Roadmap/25 - LOGS/kotlin/eulogioep.kt

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import java.time.LocalDateTime
2+
import java.time.Duration
3+
4+
// Concepto de LOGS (Logging):
5+
// Los logs son registros de eventos que ocurren durante la ejecución de un programa.
6+
// Son cruciales para el diagnóstico de problemas, monitoreo del rendimiento y
7+
// seguimiento de la actividad del sistema. En este ejemplo, implementaremos
8+
// un sistema de logging simple para evitar problemas de permisos.
9+
10+
// Enum para los niveles de log
11+
enum class LogLevel {
12+
INFO, WARNING, ERROR, DEBUG, TRACE
13+
}
14+
15+
// Clase simple para manejar logging
16+
class SimpleLogger(private val name: String) {
17+
fun log(level: LogLevel, message: String) {
18+
println("${LocalDateTime.now()} [$level] $name: $message")
19+
}
20+
21+
fun info(message: String) = log(LogLevel.INFO, message)
22+
fun warning(message: String) = log(LogLevel.WARNING, message)
23+
fun error(message: String) = log(LogLevel.ERROR, message)
24+
fun debug(message: String) = log(LogLevel.DEBUG, message)
25+
fun trace(message: String) = log(LogLevel.TRACE, message)
26+
}
27+
28+
class TaskManager {
29+
private val logger = SimpleLogger(TaskManager::class.java.simpleName)
30+
private val tasks = mutableListOf<Task>()
31+
32+
fun addTask(name: String, description: String) {
33+
val startTime = LocalDateTime.now()
34+
logger.info("Iniciando añadir tarea: $name")
35+
36+
tasks.add(Task(name, description))
37+
38+
val endTime = LocalDateTime.now()
39+
val duration = Duration.between(startTime, endTime)
40+
logger.info("Tarea añadida: $name. Tiempo de ejecución: ${duration.toMillis()} ms")
41+
}
42+
43+
fun removeTask(name: String) {
44+
val startTime = LocalDateTime.now()
45+
logger.warning("Iniciando eliminación de tarea: $name")
46+
47+
val removed = tasks.removeIf { it.name == name }
48+
if (removed) {
49+
logger.info("Tarea eliminada: $name")
50+
} else {
51+
logger.error("No se encontró la tarea: $name")
52+
}
53+
54+
val endTime = LocalDateTime.now()
55+
val duration = Duration.between(startTime, endTime)
56+
logger.debug("Tiempo de ejecución para eliminar tarea: ${duration.toMillis()} ms")
57+
}
58+
59+
fun listTasks() {
60+
val startTime = LocalDateTime.now()
61+
logger.info("Listando todas las tareas")
62+
63+
tasks.forEach { task ->
64+
logger.debug("Tarea: ${task.name}, Descripción: ${task.description}")
65+
}
66+
67+
val endTime = LocalDateTime.now()
68+
val duration = Duration.between(startTime, endTime)
69+
logger.trace("Tiempo de ejecución para listar tareas: ${duration.toMillis()} ms")
70+
}
71+
}
72+
73+
data class Task(val name: String, val description: String)
74+
75+
fun main() {
76+
val taskManager = TaskManager()
77+
78+
// Ejemplos de uso con diferentes niveles de severidad
79+
taskManager.addTask("Comprar víveres", "Ir al supermercado y comprar alimentos")
80+
taskManager.addTask("Hacer ejercicio", "30 minutos de cardio")
81+
taskManager.listTasks()
82+
taskManager.removeTask("Hacer ejercicio")
83+
taskManager.removeTask("Tarea inexistente")
84+
taskManager.listTasks()
85+
}

0 commit comments

Comments
 (0)