Merge pull request #3551 from aiescola/patch-1

[kotlin/es-es] Add some additional information and improved examples
This commit is contained in:
Divay Prakash 2019-06-29 09:45:40 +05:30 committed by GitHub
commit 84cb0e8899
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,6 +2,7 @@
language: kotlin language: kotlin
contributors: contributors:
- ["S Webber", "https://github.com/s-webber"] - ["S Webber", "https://github.com/s-webber"]
- ["Aitor Escolar", "https://github.com/aiescola"]
translators: translators:
- ["Ivan Alburquerque", "https://github.com/AlburIvan"] - ["Ivan Alburquerque", "https://github.com/AlburIvan"]
lang: es-es lang: es-es
@ -41,6 +42,12 @@ fun main(args: Array<String>) {
*/ */
val foo: Int = 7 val foo: Int = 7
/*
A diferencia de JavaScript, aunque el tipo se infiera, es tipado, por lo que no se puede cambiar el tipo a posteriori
*/
var fooInt = 14 // Se infiere tipo Int
fooInt = "Cadena" // ERROR en tiempo de compilación: Type mismatch
/* /*
Las cadenas pueden ser representadas de la misma manera que Java. Las cadenas pueden ser representadas de la misma manera que Java.
El escape de caracteres se realiza con una barra invertida. El escape de caracteres se realiza con una barra invertida.
@ -84,7 +91,6 @@ fun main(args: Array<String>) {
println(fooNullable?.length) // => null println(fooNullable?.length) // => null
println(fooNullable?.length ?: -1) // => -1 println(fooNullable?.length ?: -1) // => -1
/* /*
Las funciones pueden ser declaras usando la palabra clave "fun". Las funciones pueden ser declaras usando la palabra clave "fun".
Los argumentos de las funciones son especificados entre corchetes despues del nombre de la función. Los argumentos de las funciones son especificados entre corchetes despues del nombre de la función.
@ -123,6 +129,40 @@ fun main(args: Array<String>) {
println(even(6)) // => true println(even(6)) // => true
println(even(7)) // => false println(even(7)) // => false
/*
Kotlin permite el uso de lambdas, o funciones anónimas
*/
// Sin lambda:
interface MyListener {
fun onClick(foo: Foo)
}
fun listenSomething(listener: MyListener) {
listener.onClick(Foo())
}
listenSomething(object: MyListener {
override fun onClick(foo: Foo) {
//...
}
})
// Con lambda:
fun listenSomethingLambda(listener: (Foo) -> Unit) {
listener(Foo())
}
listenSomethingLambda {
//Se recibe foo
}
// el operador typealias permite, entre otras cosas, simplificar las expresiones con lambdas
typealias MyLambdaListener = (Foo) -> Unit
fun listenSomethingLambda(listener: MyLambdaListener) {
listener(Foo())
}
// Las funciones pueden tomar funciones como argumentos y // Las funciones pueden tomar funciones como argumentos y
// retornar funciones. // retornar funciones.
fun not(f: (Int) -> Boolean) : (Int) -> Boolean { fun not(f: (Int) -> Boolean) : (Int) -> Boolean {
@ -220,6 +260,11 @@ fun main(args: Array<String>) {
// Se puede acceder a los valores del mapa por su llave. // Se puede acceder a los valores del mapa por su llave.
println(fooMap["a"]) // => 8 println(fooMap["a"]) // => 8
// Tanto Map como cualquier colección iterable, tienen la función de extensión forEach
fooMap.forEach {
println("${it.key} ${it.value}")
}
/* /*
Las secuencias representan colecciones evaluadas diferidamente. Las secuencias representan colecciones evaluadas diferidamente.
Podemos crear una secuencia con la función "generateSequence". Podemos crear una secuencia con la función "generateSequence".
@ -245,7 +290,7 @@ fun main(args: Array<String>) {
val y = fibonacciSequence().take(10).toList() val y = fibonacciSequence().take(10).toList()
println(y) // => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] println(y) // => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
// Kotlin provee funciones de Orden-Mayor para trabajar con colecciones. // Kotlin provee funciones de orden superior para trabajar con colecciones.
val z = (1..9).map {it * 3} val z = (1..9).map {it * 3}
.filter {it < 20} .filter {it < 20}
.groupBy {it % 2 == 0} .groupBy {it % 2 == 0}
@ -305,17 +350,11 @@ fun main(args: Array<String>) {
ese tipo sin convertido de forma explícita. ese tipo sin convertido de forma explícita.
*/ */
fun smartCastExample(x: Any) : Boolean { fun smartCastExample(x: Any) : Boolean {
if (x is Boolean) { return when (x) {
// x es automaticamente convertido a Boolean is Boolean -> x // x es automaticamente convertido a Boolean
return x is Int -> x > 0 // x es automaticamente convertido a Int
} else if (x is Int) { is String -> x.isNotEmpty() // x es automaticamente convertido a String
// x es automaticamente convertido a Int else -> false
return x > 0
} else if (x is String) {
// x es automaticamente convertido a String
return x.isNotEmpty()
} else {
return false
} }
} }
println(smartCastExample("Hola, mundo!")) // => true println(smartCastExample("Hola, mundo!")) // => true
@ -345,7 +384,8 @@ enum class EnumExample {
/* /*
La palabra clave "object" se puede utilizar para crear objetos únicos. La palabra clave "object" se puede utilizar para crear objetos únicos.
No podemos asignarlo a una variable, pero podemos hacer referencia a ella por su nombre. No podemos asignarlo a una variable, pero podemos hacer referencia a ella por su nombre.
Esto es similar a los objetos únicos de Scala Esto es similar a los objetos únicos de Scala.
En la mayoría de ocasiones, los objetos únicos se usan como alternativa a los Singleton.
*/ */
object ObjectExample { object ObjectExample {
fun hello() : String { fun hello() : String {