Ejemplo de Kotlin JS para desarollo web

Kotlin JS

Un ejemplo simple, similar al código que vimos en la entrada Ejemplo: Html Builder (KotlinJS), sobre cómo usar Kotlin en el desarrollo web en lugar de Javascript. Adaptación del código Kotlin JS for Web development disponible en el repositorio kotlinjs-example.
<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>KotlinJS</title>
</head>
<body>
    <script src="out/production/Kotlin Web/lib/kotlin.js"></script>
    <script src="out/production/Kotlin Web/Kotlin Web.js"></script>
</body>
</html>
//Main.tk
import html.*
import kotlin.browser.document

fun main() {
    document.body?.apply {

        h1("Desarrollo Web con KotlinJS")

        div {
            p("Test para generar código HTML con Kotlin")
            p("Iterando sobre un rango con for:")
            ul {
                for (i in 1..10) {
                    if (i < 10) li("0$i") else li("$i")
                }
            }
        }
    }
}
//html.kt
package html

import org.w3c.dom.Element
import kotlin.browser.document

// enumeramos las etiquetas HTML
enum class HtmlTag(val text: String) {
    H1("h1"),
    DIV("div"),
    P("p"),
    UL("ul"),
    LI("li")
}

// funciones sobre objetos de tipo Element que devuelven el resultado
// de una función que toma como primer argumento un valor del enum
fun Element.h1(text: String): Element = textElement(HtmlTag.H1, text)
fun Element.div(f: Element.() -> Unit) = structuralElement(HtmlTag.DIV, f)
fun Element.p(text: String): Element = textElement(HtmlTag.P, text)
fun Element.ul(f: Element.() -> Unit) = structuralElement(HtmlTag.UL, f)
fun Element.li(text: String) = textElement(HtmlTag.LI, text)

private fun Element.textElement(tag: HtmlTag, text: String): Element {
    return createTag(tag) { textContent = text }
}

private fun Element.structuralElement(tag: HtmlTag, f: Element.() -> Unit): Element {
    return createTag(tag) { f() }
}

private fun Element.createTag(tag: HtmlTag, f: Element.() -> Unit): Element {
    val element = document.createElement(tag.text)
    element.f()
    append(element)
    return element
}
El resultado se ve así en el navegador:

Comentarios

Entradas populares

Recursos gratis para aprender Kotlin

I/O: entrada y salida de datos en consola

Lectura y escritura de archivos