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
   36   37   38   39   40   41   42   43   44   45   46