# Kotlin Kotlin es un lenguaje de programación estático de código abierto que admite la programación funcional y orientada a objetos. Proporciona una sintaxis y conceptos similares a los de otros lenguajes, como C#, Java y Scala, entre muchos otros. No pretende ser único, sino que se inspira en décadas de desarrollo del lenguaje. Cuenta con variantes que se orientan a la JVM (Kotlin/JVM), JavaScript (Kotlin/JS) y el código nativo (Kotlin/Native). ![](https://i.imgur.com/M8hPb0r.jpg) ## Variables - var: Son variables de lectura y escritura, estas variables el valor puede cambiarse. - val: Son variables de solo lectura, dichas variables una vez asignado el valor no puede ser cambiado posteriormente. - const: Es una variante de las variables de solo lectura, estas se definen fuera de la función y se escriben con la palabra reservada const seguida de la palabra reservada val, este tipo de variables son usada para valores que nunca cambian. Son variables que se crean en tiempo de compilación. En Kotlin no se puede cambiar el tipo de dato con que se a definido una variable, si la variable se definio con el tipo de dato String solo podremos actualizar dicho valor por otro String, por ejemplo no podemos pasar de un string a un numero. ## Operaciones con tipos de datos En Kotlin las operaciones son traducidas a funciones interiormente por el compilador. La operación val tercerValor = primerValor + segundoValor es lo mismo que decir tercerValor = primerValor.plus(segundoValor). Recuerda que Kotlin te permite extender el lenguaje para aprovechar estas funcionalidades. |Expresión| Función| Operator Fun| | -------- | -------- | -------- | |a + b | c = a + b | public operator fun plus(other: Int): Int| |a - b| c = a - b | public operator fun minus(other: Int): Int| |a * b| c = a * b | public operator fun times(other: Int): Int| |a / b | a = a / b | public operator fun div(other: Int): Int| |a % b | c = a % b | public operator fun rem(other: Int): Int| |a++ | c = a++ | public operator fun inc(): Int| |a– | c = a– | public operator fun dec(): Int| |a > b | c = a > b | public override operator fun compareTo(other: Int): Int| |a < b | c = a < b | public override operator fun compareTo(other: Int): Int| |a >= b | c = a >= b | public override operator fun compareTo(other: Int): Int| |a <= b | c = a <= b | public override operator fun compareTo(other: Int): Int| |a != b | c = a != b | public open operator fun equals(other: Any?): Boolean| Dependiendo del tipo de dato que tengas podrás utilizar todos o solamente algunas de estas operaciones, por ejemplo si tienes una variable del tipo de dato String no vas a poder dividirla, a menos que tú crees esa función. Sin embargo, sí vas a poder sumar dos variables del tipo de dato String para obtener el valor de dicha suma. ## Lambdas Podemos declarar funciones anónimas o funciones lambda de la siguiente forma: ```kotlin= // Sin inferencia de tipos val sum : (Int, Int) -> Int = { x, y -> x + y } // Con inferencia de tipos val sum = { x: Int, y: Int -> x + y} ``` Si las funciones anónimas reciben solo un parámetro se puede hacer uso de la palabra **it**, que hace referencia al parámetro que pasemos. ```kotlin= val doubleNumber: (Int) -> Int = { it * 2 } ``` ## Scope functions Funciones que se ejecutan según el contexto del objeto - let: Se ejecuta si el objeto no es nulo ```kotlin= fun main(args: Array<String>) { var nombre: String? = null nombre?.let { valor -> println("El nombre no es nulo, es $valor") } nombre = "Pepe" nombre?.let { valor -> println("El nombre no es nulo, es $valor") } } ``` - with: Nos permite acceder a las propiedas de un objeto sin llamar al objeto. ```kotlin= fun main(args: Array<String>) { val heroes = listOf("Spiderman", "Batman", "Ironman") with(heroes) { println("La lista de heroes: $this") println(size) } } ``` [Scope Functions Kotlin](https://kotlinlang.org/docs/scope-functions.html) ###### tags: `|Platzi` `Kotlin`