1
+ // Ejemplos simples de funciones de orden superior
2
+
3
+ // 1. Función que recibe otra función como parámetro
4
+ fun operacion (a : Int , b : Int , funcion : (Int , Int ) -> Int ): Int {
5
+ return funcion(a, b)
6
+ }
7
+
8
+ // 2. Función que devuelve otra función
9
+ fun multiplicadorPor (factor : Int ): (Int ) -> Int {
10
+ return { numero -> numero * factor }
11
+ }
12
+
13
+ fun main () {
14
+ // Uso de la función 'operacion'
15
+ val suma = operacion(5 , 3 ) { x, y -> x + y }
16
+ println (" Suma: $suma " )
17
+
18
+ val multiplicacion = operacion(5 , 3 ) { x, y -> x * y }
19
+ println (" Multiplicación: $multiplicacion " )
20
+
21
+ // Uso de la función 'multiplicadorPor'
22
+ val duplicar = multiplicadorPor(2 )
23
+ println (" Duplicar 7: ${duplicar(7 )} " )
24
+
25
+ // Ejercicio Extra
26
+ data class Estudiante (
27
+ val nombre : String ,
28
+ val fechaNacimiento : String ,
29
+ val calificaciones : List <Double >
30
+ )
31
+
32
+ val estudiantes = listOf (
33
+ Estudiante (" Ana" , " 2000-05-15" , listOf (8.5 , 9.0 , 9.5 , 10.0 )),
34
+ Estudiante (" Carlos" , " 1999-11-30" , listOf (7.0 , 8.0 , 8.5 , 9.0 )),
35
+ Estudiante (" Elena" , " 2001-03-22" , listOf (9.0 , 9.5 , 10.0 , 10.0 )),
36
+ Estudiante (" David" , " 2000-09-10" , listOf (6.5 , 7.0 , 7.5 , 8.0 ))
37
+ )
38
+
39
+ // Promedio calificaciones
40
+ val promedios = estudiantes.map { estudiante ->
41
+ val promedio = estudiante.calificaciones.average()
42
+ " ${estudiante.nombre} : ${" %.2f" .format(promedio)} "
43
+ }
44
+ println (" Promedios: $promedios " )
45
+
46
+ // Mejores estudiantes
47
+ val mejoresEstudiantes = estudiantes.filter {
48
+ it.calificaciones.average() >= 9.0
49
+ }.map { it.nombre }
50
+ println (" Mejores estudiantes: $mejoresEstudiantes " )
51
+
52
+ // Nacimiento (ordenado desde el más joven)
53
+ val ordenPorEdad = estudiantes.sortedByDescending { it.fechaNacimiento }
54
+ .map { it.nombre }
55
+ println (" Orden por edad (más joven primero): $ordenPorEdad " )
56
+
57
+ // Mayor calificación
58
+ val mayorCalificacion = estudiantes.flatMap { it.calificaciones }.maxOrNull()
59
+ println (" Mayor calificación: $mayorCalificacion " )
60
+ }
0 commit comments