Kotlin es un lenguaje de programación moderno que compila a bytecode Java. Es gratuito y de código abierto, y promete hacer que la codificación para Android sea aún más divertida.
En el artículo anterior de esta serie, aprendió sobre la nulabilidad, los bucles y las condiciones en Kotlin. En este tutorial, continuaremos aprendiendo el idioma al observar los API de rangos y colecciones en Kotlin.
Un rango en Kotlin es un tipo único que define un valor de inicio y un valor final. En otras palabras, es un intervalo entre un valor inicial y uno final. Los rangos en Kotlin están cerrados, lo que significa que el valor de inicio y el valor final están incluidos en el rango.
Ahora veremos las diferentes formas de crear rangos en Kotlin..
...
Operadorval oneToFive = 1… 5
En el código anterior, hemos creado un rango cerrado. Esta variable oneToFive
incluirá los siguientes valores: 1, 2, 3, 4, 5. Podemos recorrerlo usando el para
construcción de bucle.
para (n en oneToFive) imprimir (n)
El código anterior se puede acortar a:
para (n en 1… 5) imprimir (n)
También podemos crear una gama de personajes:
val aToZ = "a" ... "z"
La variable de la A a la Z
Tendrá todas las letras en el alfabeto inglés..
rangeTo ()
Funciónlos ...
operador puede ser reemplazado con el rangeTo ()
Función de extensión para crear un rango. Por ejemplo, también podemos hacer esto. 1.rangeTo (5)
y todavía tendría los mismos resultados que usando el ...
operador como se discutió anteriormente.
val oneToFive: IntRange = 1.rangeTo (5)
Abajo a()
FunciónEsta es otra función de extensión que creará un rango desde un número dado hasta otro.
val fiveToOne = 5.downTo (1)
Podemos modificar el rango utilizando el paso()
función. Esto modificará el delta entre cada elemento en el rango..
val oneToTenStep = 1… 10 paso 2 // 1, 3, 5, 7, 9
El código anterior contendrá números impares entre 1 y 10.
en
Operadorlos en
el operador se utiliza para determinar si un valor está presente en un rango dado.
if (5 en 1… 10) imprimir ("Sí 5 está en el rango") // imprime "Sí 5 está en el rango"
En el código anterior, verificamos si 5 está en el rango 1 ... 10 usando el en
operador. También podemos hacer lo contrario usando !norte
para comprobar si 5 no está en el rango.
Las colecciones se utilizan para almacenar grupos de objetos relacionados en la memoria. En una colección, podemos recuperar, almacenar u organizar los objetos. Kotlin proporciona su API de colecciones como una biblioteca estándar construida sobre la API de colecciones de Java. (Discutiremos las interfaces en Kotlin en una publicación futura).
Debe tener en cuenta que estas interfaces están vinculadas a su implementación en tiempo de compilación. No puede ver el código fuente de la implementación en Kotlin, porque las colecciones son implementadas por las Colecciones Java estándar, como Lista de arreglo
, Mapas
, HashMap
, Conjuntos
, HashSet
, Lista
y así. Para comprender realmente la API de colecciones en Kotlin, deberá familiarizarse con estas clases e interfaces básicas en Java.
En esta sección, aprenderemos sobre el Lista
, Conjunto
y Mapa
Colecciones en Kotlin. (Si desea un repaso de arrays en Kotlin, visite el primer tutorial de esta serie.)
Las colecciones de Kotlin nos dan la capacidad de lograr mucho con solo un poco de código, a diferencia de Java, ¡que parece necesitar mucho código para lograr un poco! Kotlin tiene dos variantes de colecciones: mutables e inmutables. Una colección mutable nos brinda la capacidad de modificar una colección ya sea agregando, eliminando o reemplazando un elemento. Las colecciones inmutables no se pueden modificar y no tienen estos métodos de ayuda..
Tenga en cuenta que la adición, eliminación o reemplazo de un elemento en una colección inmutable es posible a través de las funciones del operador (llegaremos a eso en breve), pero estas terminarán creando una nueva colección..
Iterable
InterfazEl kotlin Iterable
La interfaz está en la parte superior de la jerarquía de clases de colecciones. Esta interfaz permite que las colecciones se representen como una secuencia de elementos (que se pueden iterar, naturalmente).
interfaz pública iterableiterador divertido del operador abstracto público (): iterador
Colección
InterfazEl kotlin Colección
interfaz extiende el Iterable
interfaz. los Colección
La interfaz es inmutable. En otras palabras, tiene acceso de solo lectura a las colecciones. los Conjunto
y Lista
Las interfaces (más sobre esto en breve) en Kotlin extienden esta interfaz.
Algunas de las funciones y propiedades disponibles en el Colección
interfaz son:
tamaño
: esta propiedad devuelve el tamaño de la colección.esta vacio()
: devuelve true si la colección está vacía o false de lo contrario. contiene (elemento: E)
: devuelve true si el elemento especificado en el argumento está presente en la colección.contiene todo (elemento: colección)
: devuelve true si el elemento en la colección pasado como argumento está presente en la colección. Colección de interfaz pública: Iterable tamaño de valor público: Int público fun isEmpty (): contiene un operador público booleano fun (elemento: @UnsafeVariance E): iterador fun (boolean override fun) (iterador) diversión pública contiene todos (elementos: colección<@UnsafeVariance E>): Booleano
MutableIterable
InterfazEsta interfaz en Kotlin nos da un iterador mutable especializado desde el padre Iterable
interfaz.
interfaz pública MutableIterable: Iterable anular fun iterator (): MutableIterator
Recolección mutable
Interfazlos Recolección mutable
La interfaz en Kotlin es una interfaz especializada que permite que las colecciones sean mutables. En otras palabras, las operaciones de agregar y eliminar se pueden realizar en una colección determinada. Esta interfaz extiende tanto la Colección
interfaz y la MutableIterable
interfaz ya discutida anteriormente. los MutableSet
y Lista mutable
Las interfaces (llegaremos a ellas en breve) en Kotlin extienden esta interfaz. Las funciones disponibles en esta interfaz, aparte de las disponibles en sus padres, son:
añadir (elemento: E)
: agrega el elemento pasado como un argumento a la colección y devuelve verdadero si es exitoso o falso si la colección no admite duplicados y el elemento ya está presente.eliminar (elemento: E)
: elimina el elemento pasado como un argumento de la colección. Devuelve verdadero si fue exitoso o falso si no estaba presente en la colección.addAll (elementos: Colección)
: agrega todos los elementos de la colección pasados como argumentos a la colección. Devuelve verdadero si fue exitoso o falso si no se agregó nada.removeAll (elementos: Colección)
: elimina todos los elementos presentes en la colección pasados como argumentos. Devuelve verdadero si fue exitoso o falso si no se eliminó nada.retener todos (elementos: colección)
: conserva solo los elementos presentes en las colecciones pasadas como argumentos. Devuelve verdadero si fue exitoso o falso si no se retuvo nada. claro()
: elimina todos los elementos de esta colección.interfaz pública MutableCollection: Colección , MutableIterable anular fun iterator (): MutableIterator public fun add (elemento: E): Boolean public fun remove (element: E): Boolean public fun addAll (elements: Collection ): Boolean public fun removeAll (elements: Collection ): Diversión pública booleana retener todos (elementos: Colección ): Boolean public fun clear (): Unit
Ahora que ha aprendido acerca de las principales interfaces en la jerarquía de clases de colección en Kotlin, ahora veamos cómo Kotlin maneja colecciones como listas, conjuntos y mapas en la parte restante del tutorial..
Una lista es una colección ordenada de elementos. Esta es una colección popular que es ampliamente utilizada. Veamos diferentes formas de crear una lista en Kotlin.
lista de()
FunciónEn Kotlin, podemos crear una lista inmutable (solo lectura) usando el lista de()
Función auxiliar de la biblioteca estándar de Kotlin. Esta función devuelve un Kotlin. Lista
Tipo de interfaz.
Números var: Lista= listOf (1, 2, 3, 4, 5) var names: List = listOf ("Chike", "Nnamdi", "Mgbemena") para (nombre en nombres) println (nombre)
Ejecutando el código de arriba se imprimirá:
Chike Nnamdi Mgbemena
Además, podemos pasar valores de diferentes tipos a la lista de()
como argumentos y el resultado seguirá funcionando, será una lista de tipos mixtos.
var listMixedTypes = listOf ("Chike", 1, 2.445, 's') // todavía se compilará
lista vacía()
FunciónEsta función simplemente crea una lista inmutable vacía y devuelve un Kotlin Lista
Tipo de interfaz.
val emptyList: Lista= emptyList ()
listOfNotNull ()
FunciónEsta función crea una nueva lista inmutable que contiene solo elementos que no son nulos. Tenga en cuenta que esta función devuelve un Kotlin Lista
tipo de interfaz también.
val nonNullsList: Lista= listOfNotNull (2, 45, 2, nulo, 5, nulo)
los Lista
interfaz de la biblioteca estándar de Kotlin se extiende sólo la Colección
interfaz. En otras palabras, su único padre es el Colección
interfaz. Anula todas las funciones en la interfaz principal para satisfacer sus necesidades especiales y también define sus propias funciones, tales como:
obtener (índice: int)
: un operador de función que devuelve el elemento en el índice especificado. indexOf (elemento: E)
: devuelve el índice de la primera aparición del elemento pasado como un argumento en la lista, o -1 si no se encuentra ninguno.lastIndexOf (elemento: E)
: devuelve el índice de la última aparición del elemento pasado como un argumento en la lista, o -1 si no se encuentra ninguno. listIterator ()
: devuelve un iterador de lista sobre los elementos de la lista.subList (fromIndex: Int, toIndex: Int)
: devuelve una lista que contiene la parte de la lista entre los índices de inicio y fin especificados. println (names.size) // 3 println (names.get (0)) // "Chike" println (names.indexOf ("Mgbemena")) // 2 println (names.contains ("Nnamdi")) // 'cierto'
arrayListOf ()
FunciónEsto crea una lista mutable y devuelve un Java Lista de arreglo
tipo.
val stringList: ArrayList= arrayListOf ("Hola allí")
mutableListOf ()
FunciónPara agregar, eliminar o reemplazar valores en una lista, debemos hacer que la lista sea mutable. Podemos convertir una lista inmutable en una mutable llamando a la función toMutableList ()
en la lista. Sin embargo, tenga en cuenta que este método creará una nueva lista.
var mutableNames1 = names.toMutableList () mutableNames1.add ("Ruth") // ahora mutable y agregó "Ruth" a la lista
Para crear una lista mutable de un cierto tipo desde cero, por ejemplo. Cuerda
, usamos mutableListOf
, mientras que para los tipos mixtos podemos usar el mutableListOf ()
función en su lugar.
// una lista mutable de un cierto tipo, por ejemplo, String val mutableListNames: MutableList= mutableListOf ("Josh", "Kene", "Sanya") mutableListNames.add ("Mary") mutableListNames.removeAt (1) mutableListNames [0] = "Oluchi" // reemplaza el elemento en el índice 0 por "Oluchi" // a lista mutable de tipos mixtos val mutableListMixed = mutableListOf ("BMW", "Toyota", 1, 6.76, 'v')
Cualquiera de estas funciones devolverá un Lista mutable
Tipo de interfaz Kotlin. Esta interfaz extiende tanto la Recolección mutable
y Lista
interfaces discutidas anteriormente en esta sección. los Lista mutable
La interfaz agrega métodos para la recuperación o sustitución de un elemento según su posición:
conjunto (índice: Int, elemento: E)
: sustituye un elemento en la lista con otro elemento. Esto devuelve el elemento previamente en la posición especificada..agregar (índice: Int, elemento: E)
: inserta un elemento en el índice especificado. removeAt (index: Int)
: se deshace del elemento en un índice particular. val mutableListFood: MutableList= mutableListOf ("Rice & stew", "Jollof rice", "Eba & Egusi", "Fried rice") mutableListFood.remove ("Fried rice") mutableListFood.removeAt (0) mutableListFood.set (0, "Beans") mutableListFood. agregue (1, "Bread & tea") para (foodName en mutableListFood) println (foodName)
Ejecutando el código de arriba, producimos el siguiente resultado:
Frijoles Pan & té Eba & Egusi
Tenga en cuenta que todas estas funciones crean un Java Lista de arreglo
entre bastidores.
Un conjunto es una colección desordenada de elementos únicos. En otras palabras, no puede tener duplicados! Veamos algunas de las diferentes formas de crear un set en Kotlin. Cada uno de estos crea una estructura de datos diferente, cada uno de los cuales está optimizado para un cierto tipo de tarea.
setOf ()
FunciónPara crear un conjunto inmutable (solo lectura) en Kotlin, podemos usar la función setOf ()
, que devuelve un Kotlin Conjunto
Tipo de interfaz.
// crea un conjunto inmutable de tipos mixtos val mixedTypesSet = setOf (2, 4.454, "how", "far", 'c') // compilará var intSet: Set= setOf (1, 3, 4) // solo se permiten tipos de enteros
Tenga en cuenta que el Kotlin Conjunto
La interfaz solo extiende el Kotlin. Colección
Interfaz y anula todas las propiedades disponibles en su padre.
hashSetOf ()
Función Utilizando la hashSetOf ()
la función crea un Java HashSet
Colección que almacena elementos en una tabla hash. Porque esta función devuelve un Java HashSet
Escriba, podemos agregar, eliminar o borrar elementos del conjunto. En otras palabras, es mutable..
val intsHashSet: java.util.HashSet= hashSetOf (1, 2, 6, 3) intsHashSet.add (5) intsHashSet.remove (1)
sortedSetOf ()
FunciónUtilizando la sortedSetOf ()
la función crea un Java TreeSet
colección detrás de escena, que ordena elementos según su orden natural o por un comparador. Este conjunto también es mutable..
val intsSortedSet: java.util.TreeSet= sortedSetOf (4, 1, 7, 2) intsSortedSet.add (6) intsSortedSet.remove (1) intsSortedSet.clear ()
linkedSetOf ()
FunciónEsta función devuelve un Java LinkedHashSet
tipo. Este conjunto mutable mantiene una lista vinculada de las entradas en el conjunto, en el orden en que se insertaron..
val intsLinkedHashSet: java.util.LinkedHashSet= linkedSetOf (5, 2, 7, 2, 5) // 5, 2, 7 intsLinkedHashSet.add (4) intsLinkedHashSet.remove (2) intsLinkedHashSet.clear ()
mutableSetOf ()
FunciónNosotros podemos usar mutableSetOf ()
para crear un conjunto mutable. Esta función devuelve un Kotlin. MutableSet
Tipo de interfaz. Detrás de escena, esta función simplemente crea un Java. LinkedHashSet
.
// crea un conjunto mutable de tipos int solo val intsMutableSet: MutableSet= mutableSetOf (3, 5, 6, 2, 0) intsMutableSet.add (8) intsMutableSet.remove (3)
los MutableSet
interfaz se extiende tanto la Recolección mutable
y el Conjunto
interfaces.
Los mapas asocian claves a valores. Las claves deben ser únicas, pero los valores asociados no necesitan serlo. De esa manera, cada clave se puede usar para identificar de forma única el valor asociado, ya que el mapa se asegura de que no pueda haber claves duplicadas en la colección. Detrás de escena, Kotlin usa el Java. Mapa
colección para implementar su tipo de colección de mapas.
mapa de()
FunciónPara crear un inmutable o solo lectura. Mapa
colección en Kotlin, utilizamos la mapa de()
función. Creamos un mapa con esta función dándole una lista de pares: el primer valor es la clave y el segundo es el valor. Llamando a esta función devuelve un Kotlin. Mapa
Tipo de interfaz.
val callingCodesMap: Mapa= mapOf (234 a "Nigeria", 1 a "USA", 233 a "Ghana") para ((clave, valor) en callingCodesMap) println ("$ key es el código de llamada para $ value") print (callingCodesMap [234]) // Nigeria
Ejecutar el código anterior producirá el resultado:
234 es el código de llamada para Nigeria 1 es el código de llamada para EE.UU. 233 es el código de llamada para Ghana
A diferencia del Lista
y Conjunto
interfaces en Kotlin que extienden el Colección
interfaz, la Mapa
La interfaz no se extiende en absoluto. Algunas de las propiedades y funciones disponibles en esta interfaz son:
tamaño
: esta propiedad devuelve el tamaño de la colección de mapas.esta vacio()
: devuelve true si el mapa está vacío o false de lo contrario.contiene la clave (clave: K)
: devuelve true si el mapa contiene la clave en el argumento. contieneValor (valor: V)
: devuelve true si el mapa asigna una o más claves al valor pasado como argumento.obtener (clave: K)
: devuelve el valor que coincide con la clave dada o 'nulo' si no se encuentra ninguno. llaves
: esta propiedad devuelve un inmutable Conjunto
De todas las claves en el mapa..valores
: devuelve un inmutable Colección
De todos los valores en el mapa..mutableMapOf ()
Funciónlos mutableMapOf ()
La función crea un mapa mutable para nosotros para que podamos agregar y eliminar elementos en el mapa. Esto devuelve un Kotlin Mapa mutable
Tipo de interfaz.
monedas de cambioMutableMap: MutableMap= mutableMapOf ("Naira" a "Nigeria", "Dollars" a "USA", "Pounds" a "UK") println ("Los países son $ currenciesMutableMap.values") // Los países son [Nigeria, USA, UK ] println ("Las monedas son $ currenciesMutableMap.keys") // Las monedas son [Naira, Dollars, Pounds] currenciesMutableMap.put ("Cedi", "Ghana") currenciesMutableMap.remove ("Dollars")
los Mapa mutable
la interfaz no extiende la Recolección mutable
interfaz; es solo el padre es el Mapa
interfaz. Anula el llaves
, entradas
y valores
Propiedades de la interfaz padre para redefinirlas. Estas son algunas de las funciones adicionales disponibles en el Mapa mutable
interfaz:
poner (clave: K, valor: V)
: inserta la clave, el par de valores en el mapa. Esto devolverá el valor anterior vinculado con la clave o nulo si la clave no se usó anteriormente. eliminar (clave: K)
: elimina la clave y su valor vinculado del mapa. poner todo
(desde: Mapa)
: actualiza el mapa con todos los datos del mapa dado. Se agregarán nuevas claves, y las claves existentes se actualizarán con nuevos valores. claro()
: elimina todos los elementos del mapa. Podemos obtener el valor de una clave usando el obtener()
función. También podemos usar la notación de corchete como atajo para obtener()
.
print (currenciesMutableMap.get ("Nigeria")) // imprimirá Naira print (currenciesMutableMap ["Nigeria"]) // imprimirá Naira
hashMapOf ()
FunciónUsando esta función devuelve un Java HashMap
Tipo que es mutable. los HashMap
clase utiliza una tabla hash para implementar el Java Mapa
interfaz.
val personsHashMap: java.util.HashMap= hashMapOf (1 a "Chike", 2 a "John", 3 a "Emeka") personasHashMap.put (4, "Chuka") personasHashMap.remove (2) print (personsHashMap [1]) // imprimirá Chike
linkedHashMap ()
FunciónEsta función devuelve un Java LinkedHashMap
Tipo que es mutable. los LinkedHashMap
clase extiende Java HashMap
y mantiene una lista enlazada de las entradas en el mapa en el orden en que se insertaron.
val postalCodesHashMap: java.util.LinkedHashMap= linkedMapOf ("NG" a "Nigeria", "AU" a "Australia", "CA" a "Canada") postalCodesHashMap.put ("NA", "Namibia") postalCodesHashMap.remove ("AU") postalCodesHashMap.get ("CA") // Canadá
sortedMapOf ()
FunciónEsta función devuelve un Java SortedMap
Tipo que es mutable. El java SortedMap
La clase ve que las entradas en el mapa se mantienen en orden ascendente de claves..
val personsSortedMap: java.util.SortedMap= sortedMapOf (2 a "Chike", 1 a "John", 3 a "Emeka") personsSortedMap.put (7, "Adam") personsSortedMap.remove (3)
Recuerde, la implementación de estas interfaces de colección en Kotlin ocurre en tiempo de compilación.
Kotlin nos proporciona muchas funciones de operador útiles llamadas funciones de extensión que se pueden invocar en colecciones. Echemos un vistazo a algunos de los más útiles..
último()
FunciónEsta función de operador devuelve el último elemento de una colección, como una lista o un conjunto. También podemos proporcionar un predicado para buscar dentro de un subconjunto de elementos.
val stringList: lista= listOf ("in", "the", "club") print (stringList.last ()) // imprimirá "club" // dada una impresión de predicado (stringList.last it.length == 3) / / imprimirá "the" val intSet: Set = setOf (3, 5, 6, 6, 6, 3) print (intSet.last ()) // imprimirá 6
primero()
FunciónEsta función de operador devuelve el primer elemento cuando se invoca en una colección, como una lista o un conjunto. Si se da un predicado, entonces lo utiliza para restringir la operación a un subconjunto de elementos.
print (stringList.first ()) // imprimirá "in" print (intSet.first ()) // imprimirá 3
max ()
FunciónAl invocar esta función de operador en una colección como una lista o conjunto, se devuelve el elemento más grande, o nulo si no se encuentra el elemento más grande.
val intList: Lista= listOf (1, 3, 4) print (intList.max ()) // imprimirá 4 print (intSet.max ()) // imprimirá 6
soltar()
FunciónLlamar a esta función de operador devuelve una nueva lista o conjunto que contiene todos los elementos excepto los primeros n elementos.
print (stringList.drop (2)) // imprimirá "club"
más()
FunciónEsta función de operador devuelve una colección que contiene todos los elementos del original y luego el elemento dado si aún no está en la colección. Esto terminará creando una nueva lista en lugar de modificarla..
print (intList.plus (6)) // imprimirá [1, 3, 4, 6]
menos()
FunciónLo contrario de la más()
la función es la menos()
función. Devuelve una colección que contiene todos los elementos del conjunto original, excepto el elemento dado. Esto también termina creando una nueva lista en lugar de alterarla..
print (intList.minus (3)) // imprimirá [1, 4]
promedio()
FunciónLlamar a esta función de operador devolverá un número promedio de elementos en la colección.
print (intList.average ()) // imprimirá 2.666666666666666665
La mayoría de estas funciones de extensión están disponibles en la biblioteca estándar de colecciones de Kotlin. Se recomienda consultar la documentación para conocer a los demás..
En este tutorial, aprendió sobre el rango y la API de colecciones en el lenguaje de programación Kotlin. En el siguiente tutorial de la serie Kotlin From Scratch, se le presentarán las funciones de Kotlin. Te veo pronto!
Para obtener más información sobre el idioma Kotlin, recomiendo visitar la documentación de Kotlin. O echa un vistazo a algunas de nuestras otras publicaciones de desarrollo de aplicaciones para Android aquí en Envato Tuts!