Page 41 - Revista FIUDE 2018
P. 41
Revista de la Facultad de Ingeniería, Año 5, Número 1
final. Esto es porque el compilador hace un control estricto de la Esto es porque el compilador hace un control estricto de la Esto es porque el compilador hace un control estricto de la "nulabilidad",
cuando agregamos el “?” le estamos diciendo que esta varia?” le estamos diciendo que esta variable puede almacenar ble puede almacenar
datos nulos; en el caso de que no lo hagamosen el caso de que no lo hagamos, nos dará un error de compilación. s dará un error de compilación. En
n
nuestro caso si inicializamos un uestro caso si inicializamos un EstudianteKotlin con un nombre con valor con valor null la
aplicación no compilará.
L6: Aquí hacemos la declaración de la funció: Aquí hacemos la declaración de la función main. Como podemos ver, a Como podemos ver, a
d
diferencia de Java, se pueden declarar funciones fuera de una clase.iferencia de Java, se pueden declarar funciones fuera de una clase.
L7-L8: En estás dos líneas se está creando una lista de : En estás dos líneas se está creando una lista de EstudianteKotlinEstudianteKotlin. Este
l l lenguaje cuenta con una librería estándar para manejo de coleccionesenguaje cuenta con una librería estándar para manejo de coleccionesenguaje cuenta con una librería estándar para manejo de colecciones; de hecho,
t tiene variantes para manejar coliene variantes para manejar colecciones inmutables o mutables. ecciones inmutables o mutables. En este caso,
listOf crea una lista inmutable. crea una lista inmutable. Podemos observar que no se usa la palabra “Podemos observar que no se usa la palabra “new”
para instanciar objetos como en otros lenguajes. ara instanciar objetos como en otros lenguajes. Otro punto importante es que en Otro punto importante es que en
p
Kotlin no es necesario definir el tipo de dato en asignaciones o retorno de tlin no es necesario definir el tipo de dato en asignaciones o retorno de tlin no es necesario definir el tipo de dato en asignaciones o retorno de
f f
funciones, esto pues el compilador hace uso de inferencia de tipos (typeinference) unciones, esto pues el compilador hace uso de inferencia de tipos (typeinference) unciones, esto pues el compilador hace uso de inferencia de tipos (typeinference)
para determinarlo en tiempo de compilación; la variable “ara determinarlo en tiempo de compilación; la variable “estudiantes”estudiantes” es una List
p
i
inmutable con elementos de tipo nmutable con elementos de tipo EstudianteKotlin; toda esa información se obtiene ; toda esa información se obtiene
en tiempo de compilación por cómo está declarado el método n tiempo de compilación por cómo está declarado el método listOflistOfde, la librería
e
estándar.
L8: Inicializamos un objeto usando parámetros nombrados (namedparameters): Inicializamos un objeto usando parámetros nombrados (namedparameters): Inicializamos un objeto usando parámetros nombrados (namedparameters); esto
nos permite llamar una función o constructor indicando los valores que toman losos permite llamar una función o constructor indicando los valores que toman losos permite llamar una función o constructor indicando los valores que toman los
a
argumentos de manera explícita;rgumentos de manera explícita; la intención de esto es mejorar la legibilidad en la intención de esto es mejorar la legibilidad en
f funciones que tienen muchos parámetros. Inclusounciones que tienen muchos parámetros. Incluso, permite que se pasen los permite que se pasen los
argumentos en distinto orden al que han sido declarados en la firma del método.to orden al que han sido declarados en la firma del método.to orden al que han sido declarados en la firma del método.
P
Por ejemplo, la sentencia de la figura 4 es totalmente válida.or ejemplo, la sentencia de la figura 4 es totalmente válida.
F
Figura 4. Ejemplo de constructor con namedparameters.igura 4. Ejemplo de constructor con namedparameters.
L9: Aquí usamos la función maxBymaxBy de la librería estándar de colecciones. de la librería estándar de colecciones. El objetivo
d d
de esta función es retornar el primer elemento que tenga el mayor valor según la e esta función es retornar el primer elemento que tenga el mayor valor según la e esta función es retornar el primer elemento que tenga el mayor valor según la
función indicada, o null si no hay elementos. si no hay elementos. Considerar que la función es enviada Considerar que la función es enviada
como una expresión lambda (Lambda Expressionomo una expresión lambda (Lambda Expression ), que no es otra cosa que una ), que no es otra cosa que una
c 11
función anónima que puede ser usada como valor. nción anónima que puede ser usada como valor. Esta estructura viene de la Esta estructura viene de la
programación funcional y la podemos usarrogramación funcional y la podemos usar, puesto que Kotlin tiene la capacidad de puesto que Kotlin tiene la capacidad de
p
combinar programación funcional con programación orientada a objetos.ombinar programación funcional con programación orientada a objetos.ombinar programación funcional con programación orientada a objetos.
c c
El parámetro it de nuestro ejemplo es el nombre por defecto que toma el parámetro de nuestro ejemplo es el nombre por defecto que toma el parámetro de nuestro ejemplo es el nombre por defecto que toma el parámetro
d d
de una expresión lambda que recibe un sólo parámetro, en este casoe una expresión lambda que recibe un sólo parámetro, en este casoe una expresión lambda que recibe un sólo parámetro, en este caso: un
EstudianteKotlin.
El operador Elvis: (sí, se llama así por el cantante)(sí, se llama así por el cantante), que aparece en la expresiónque aparece en la expresión,
evalúa la edad de los estudiantes yde los estudiantes y, en caso de que sea null, retorna 0. retorna 0. El objetivo
d d
de este operador es hacer un control de nulos de manera más concisa.e este operador es hacer un control de nulos de manera más concisa.e este operador es hacer un control de nulos de manera más concisa.
L10: Por último, imprimimos el resultado usando plantillas de cadenas de texto : Por último, imprimimos el resultado usando plantillas de cadenas de texto : Por último, imprimimos el resultado usando plantillas de cadenas de texto
(Stringtemplates), las cuales evalúan el objeto precedido por el símbolo las cuales evalúan el objeto precedido por el símbolo las cuales evalúan el objeto precedido por el símbolo $, en
nuestro caso mayorPuntaje, y lo concatenan en la cadena de texto. y lo concatenan en la cadena de texto. Al usar una
11
http://www.baeldung.com/kotlin-lambdalambda-expressions
40