Kotlin es un nuevo lenguaje de programación para Android desarrollado por JetBrains que ofrece mejoras sobre Java como tipado estático, seguridad de nulos, funciones lambda, extensiones y más. Kotlin es interoperable con Java y produce bytecode compatible con versiones 6 o superiores de Java. El documento describe las ventajas de Kotlin sobre Java para Android como seguridad de nulos, funciones lambda, extensiones de clases, funciones de orden superior y extensiones de Android que permiten acceder a views sin findViewById.
2. Android + Java
• Java
6.5
• Restricciones
de
Java
• No
streams
• No
lambdas
• Nulabilidad
• Sintaxis
• Android
Design
API
• Nulabilidad
en
cualquier
parte
7. ¿Kotlin?
• Jetbrains
• Lenguaje
de
código
abierto
• Interoperable
(Java
6
bytecode)
• Tamaño
de
runtime
muy
pequeño
(900
kb)
• Tipado
estático
• Kotlin
1.0
8. Null Safety
var
b:
String
=
“Mobile
Day”
b
=
null
//
Compilation
Error
var
b:
String?
=
“Mobile
Day”
b
=
null
//
Ok
var
b:
String?
=
“Mobile
Day”
b
=
null
//
Ok
val
stringLength
=
b?.length
10. Function Literal aka Lambda
val
suma:
(Int,
Int)
-‐>
Int
=
{
x,
y
-‐>
x
+
y
}
val
resultado
=
suma(2,3)
Utilizar
el
“it”
para
obtener
el
tipo
inferido
val
triple:
(Int)
-‐>
Int
{
it
*
3}
val
resultado
=
(3)
11. Higher Order Functions
Funciones
que
reciben
otras
funciones
como
parámetros
fun
<T,
R>
List<T>.map(transform:
(T)
-‐>
R):
List<R>
{
val
result
=
arrayListOf<R>()
for
(item
in
this)
result.add(transform(item))
return
result
}
Uso
val
doubled
=
list.map
{
it
-‐>
it
*
2
}
12. Higher Order Functions
Funciones
que
reciben
otras
funciones
como
parámetros
fun
SharedPreferences.edit
(func:
SharedPreferences.Editor.()
-‐>
Unit)
{
val
editor
=
edit()
editor.func()
editor.apply()
}
Uso
preferences.edit
{
putString
(“MobileDay”,
“Kotlin”)}
14. Kotlin Android Extensions
apply plugin: 'kotlin-android-extensions'
//
Using
R.layout.activity_main
from
the
main
source
set
import
kotlinx.android.synthetic.main.activity_main.*
public
class
MyActivity
:
Activity()
{
override
fun
onCreate(savedInstanceState:
Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView.setText("Hello,
world!")
//
Instead
of
findView(R.id.textView)
as
TextView
}
}