Los paquetes nos permiten agrupar clases, funciones, objetos, constantes etc. en un espacio de nombres para facilitar su uso y mantenimiento.
Los paquetes agrupan funcionalidades sobre un tema específico, por ejemplo funcionalidades para el acceso a base de datos, interfaces visuales, encriptación de datos, acceso a archivos, comunicaciones en la web etc.
Los paquetes son una forma muy efectiva de organizar nuestro código para ser utilizado en nuestro proyecto o reutilizado por otros.
La librería estándar de Kotlin se organiza en paquetes, los principales son:
kotlin kotlin.annotation kotlin.collections kotlin.comparisons kotlin.io kotlin.ranges kotlin.sequences kotlin.text
Todos estos paquetes se importan en forma automática cuando compilamos nuestra aplicación.
Por ejemplo el paquete kotlin.collections tiene las declaraciones de clases e interfaces: List, MutableList etc.
Veremos ahora como crear nuestro propio paquete y luego consumir su contenido.
Crear un paquete llamado matematica y definir dos funciones en su interior que permitan sumar y restar dos valores de tipo Int.
Importar luego el paquete desde nuestro programa principal y llamar a dichas funciones.
El primer paso luego de crear el Proyecto190 nos posicionamos en la carpeta src, presionamos el botón derecho del mouse y seleccionamos New -> Package:
En el diálogo que aparece ingresamos el nombre del paquete a crear "matematica":
Ahora dentro de esta carpeta procedemos a crear un archivo llamado "funciones" presionando el botón derecho del mouse sobre la carpeta "matematica" que acabamos de crear:
El archivo que crearemos en este paquete se llamará "funciones" (un paquete puede tener muchos archivos):
Ahora ya tenemos el archivo donde codificaremos las funciones de sumar y restar:
Procedemos:
package matematica fun sumar(valor1: Int, valor2: Int) = valor1 + valor2 fun restar(valor1: Int, valor2: Int) = valor1 - valor2
El nombre del paquete va en la primera línea del código fuente después de la palabra clave package.
Ahora codificaremos nuestro programa principal donde consumiremos la funcionalidad de este paquete. Crearemos el archivo Principal.tk en la carpeta src como siempre:
import matematica.* fun main(args: Array<String>) { val su = sumar(5, 7) println("La suma es $su") val re = restar(10, 3) println("La resta es $re") }
Para importar todas las funciones definidas en el paquete matematica utilizamos la palabra clave import seguida del nombre del paquete y luego un punto y el asterisco:
import matematica.*
Una vez importado el paquete completo podemos llamar a sus funciones:
val su = sumar(5, 7) ... val re = restar(10, 3)
Si no hacemos el import se presenta un error sintáctico cuando queremos compilar el programa:
Hay varias variantes cuando hacemos uso del import. La primera es que podemos importar por ejemplo solo la función de restar del paquete matematica:
import matematica.restar fun main(args: Array<String>) { val re = restar(10, 3) println("La resta es $re") }
Como vemos indicamos luego del nombre del paquete la función a importar. Solo podremos llamar en nuestro algoritmo a la función restar.
Cuando importamos una funcionalidad podemos crear un alias, en el ejemplo siguiente importamos la función restar y la renombramos con el nombre restaEnteros:
import matematica.restar as restaEnteros fun main(args: Array<String>) { val re = restaEnteros(10, 3) println("La resta es $re") }
Esto es útil cuando importamos por ejemplo funciones de dos paquetes que tienen el mismo nombre.
Si no disponemos el import la otra posibilidad es indicar el paquete previo al nombre de la función (esto es muy engorroso si tenemos que acceder a muchas funcionalidades de un paquete):
fun main(args: Array<String>) { val su = matematica.sumar(5, 7) println("La suma es $su") val re = matematica.restar(10, 3) println("La resta es $re") }
package entradateclado fun retornarInt(mensaje: String): Int { print(mensaje) return readln().toInt() } fun retornarDouble(mensaje: String): Double { print(mensaje) return readln().toDouble() } fun retornarFloat(mensaje: String): Float { print(mensaje) return readln().toFloat() }En el programa principal (Principal.tk) importar el paquete entradateclado y llamar a varias de sus funciones.
Proyecto191 entrada.kt package entradateclado fun retornarInt(mensaje: String): Int { print(mensaje) return readln().toInt() } fun retornarDouble(mensaje: String): Double { print(mensaje) return readln().toDouble() } fun retornarFloat(mensaje: String): Float { print(mensaje) return readln().toFloat() } Principal.kt import entradateclado.* fun main(args: Array<String>) { val numero1 = retornarInt("Ingrese primer valor:") val numero2 = retornarInt("Ingrese segundo valor") println("La suma es ${numero1 + numero2}") }