[REPRODUCIENDO MÚSICA] WOJTEK KALICINSKI: Hola a todos. Mi nombre es Wojtek. Y quería compartir
con ustedes una breve historia sobre mi experiencia con el nuevo
proyecto multiplataforma de Kotlin en Kotlin 1.3. Entonces, cuando venimos a
estas conferencias, hablamos de Android, hablamos de
ejecutar Kotlin en Android para hacer aplicaciones de Android, lo
que realmente queremos decir es Kotlin JVM. Ese es el Kotlin
que sabemos que se compila en el código de bytes de Java. Y luego podemos
transformarlo en archivos .dex, ejecutarlo en Android. Pero también puede ejecutarse en servidores en la nube
, en nuestros escritorios , etc. Ahora
, en realidad, hay dos versiones más de Kotlin u objetivos de compilación. El primero, Kotlin
JS, para ejecutar JavaScript en un
entorno de navegador web o incluso algo como
funciones en la nube o Node.js. Y luego está el
nativo de Kotlin, que se compila en código de máquina en
bibliotecas nativas que pueden ejecutar o apuntar a
varias plataformas , como IOS, aplicaciones de escritorio, incluso
WebAssembly e incluso Android.
Entonces, ¿cómo empezamos realmente
con esto? Entonces, Kotlin 1.3 presenta
una nueva estructura de proyecto y un nuevo complemento
llamado Kotlin multiplataforma. Y si aplica eso
a cualquiera de sus módulos , puede seleccionar
entre un conjunto de ajustes preestablecidos para apuntar a cualquiera de
estas plataformas. Así que aquí, por ejemplo, estoy
apuntando a una biblioteca de Android y un objetivo js. Ahora, cuando los
agrega a su módulo , crea automáticamente
conjuntos de fuentes para cada uno de estos archivos Kotlin específicos de la plataforma.
Entonces, si coloca sus
archivos Kotlin en la carpeta principal js , se compilarán o
transpilarán a archivos JavaScript. Ahora, ¿qué quiero decir
con Kotlin específico, lo siento, Kotlin específico de la plataforma
? Ahora, si vas y navegas por la
documentación, las páginas de referencia para cada uno de
los paquetes de Kotlin, y pasas el mouse sobre cualquiera
de ellos, en la parte superior derecha verás estos
chips multicolores que te indican en qué
objetivo de compilación está disponible esta biblioteca. Entonces, aquí, por ejemplo, el
paquete de navegador Kotlin que le permite acceder a las interfaces
para documentos y ventanas desde el
entorno del navegador web, probablemente solo tenga sentido en un objetivo js. Y así es. Ahora, afortunadamente,
muchas, muchas de las bibliotecas y funciones principales
están disponibles en todos los objetivos de compilación.
De hecho, puede ver una
cuarta, Kotlin common, lo que significa que esta
es una biblioteca Kotlin pura que puede ejecutarse independientemente
de cualquier plataforma a la que se dirija. Y, de hecho, si agrega
el complemento multiplataforma a su proyecto, junto con los
conjuntos de fuentes específicos de la plataforma , también obtiene un
conjunto de fuentes común donde puede colocar código independiente de la plataforma. Ahora, lo que pasa con el
código independiente de la plataforma es que no puede llamar a ninguna
de las API de la plataforma. No puede llamar a ninguna de las API
específicas de js o de Android . La otra forma, por supuesto, funciona. Puede hacer que el
código específico de su plataforma de cualquiera de los sabores dependa
de una biblioteca común compartida o un conjunto de fuentes. Entonces, sabiendo todo eso, me
propuse escribir una aplicación de ejemplo solo para aprender sobre la
multiplataforma de Kotlin.
Y decidí hacer
un pequeño juego de Sudoku. Ahora, una cosa que tengo que decir
sobre la multiplataforma de Kotlin es que no es un conjunto de herramientas que le
permite escribir una aplicación una vez y ejecutarla en todas partes. Todavía necesito
crear una aplicación de Android con código específico de Android
, tal como lo haría normalmente, y luego una página web
con algún código JavaScript solo para inicializar
cosas, como puntos de entrada a mi aplicación,
IU de ciclo de vida, etc. Pero entonces, lo que hago es toda
mi lógica de negocios compartida, así que en mi caso, es
el motor de Sudoku el que resuelve y genera
tableros de Sudoku para mí, lo saco y lo
coloco en una biblioteca compartida usando Kotlin common. Y, de hecho, el único
conjunto de fuentes que tengo en esta biblioteca es common main.
Así que puse todo mi código allí. Y eso significa que está disponible
en todas las plataformas a las que decido apuntar. ESTÁ BIEN. Pero luego pensé, está bien,
tengo este motor central para resolver mi código de Sudoku. Pero también me gustaría
dibujar el tablero en la pantalla. ¿Y por qué codificarlo
para cada plataforma por separado si debería
verse igual en cada una de ellas? Así que pensé,
¿no sería bueno si tuviera una API para dibujar
en la pantalla que sea completamente
independiente de la plataforma, algo que pueda usarse como lienzo multiplataforma? Pero entonces lo que
quiero hacer es que realmente lo delegue a cada una de
las implementaciones de las plataformas. Así que quiero usar
el lienzo de Android para dibujar en Android
mientras uso el lienzo HTML para dibujar en un sitio web.
La cuestión es que les acabo de decir
que el código común de Kotlin no puede llamar a ninguna interfaz de plataforma. Así que realmente no puedo
depender de estos y exportarlos
desde este módulo. Entonces, ¿cómo funciona en Kotlin? Bueno, existe este
mecanismo esperado y real que te permite declarar las
clases esperadas en tu código común, que es casi como
definir una interfaz en Java. Y luego, en cada uno de los
conjuntos de fuentes específicos de mi plataforma , proporciono la implementación real
que puede depender y
usar las API de la plataforma , como el lienzo de Android. Ahora, cuando agrego esa dependencia
de mi conjunto de fuentes común al otro, se
parece a esto. Pero en realidad, al compilar para
una plataforma específica, como js, esta dependencia
usará el lienzo HTML5 correcto. [GONG] [RISA] OK, si pudiera mostrar
el enlace al proyecto para que todos puedan
verlo, sería genial.
[RISA] Sí. ORADOR 1: [INAUDIBLE] [RISA] [APLAUSOS] WOJTEK KALICINSKI:
Sí, eso es todo. [REPRODUCIENDO MÚSICA].