diff --git a/slides.md b/slides.md index 0b2c13f..536479e 100644 --- a/slides.md +++ b/slides.md @@ -46,7 +46,16 @@ # Jetbrains ecosystem survey * [¿Qué versión de Java usáis regularmente?](https://www.jetbrains.com/lp/devecosystem-2023/java/#java_versions) -* Todavía el 50% usan Java 8 regularmente. +* El 11% usan Java 20. +* El 45% usan Java 17. +* El 38% usan Java 11. +* Todavía el 50% usan Java 8. + + --- @@ -78,11 +87,16 @@ # Java Release Cadence :coffee: * Dos release al año. +* LTS. * Preview features. * They have a plan. + en Marzo y Septiembre + en los últimos 10 años han ido introduciendo una serie de cambios que como resultado han dado a poder modelar e implementar ADTs. + probablemente en java 23 la preview de string interpolation se eliminará. + ha recibido un feedback muy negativo y se están planteando rediseñar completamente la nueva funcionalidad. +--> --- @@ -312,10 +326,10 @@ # Otros lenguajes con soporte ADTs -* JVM: Scala, Kotlin, Clojure. +* JVM: Scala, Kotlin, Clojure * Rust * C# -* Otros lenguajes funcionales Hashkel, F#, OCaml, Lisp... +* Otros lenguajes funcionales Haskell, F#, OCaml, Lisp, Elixir... --- @@ -522,21 +536,6 @@ --- -# ADTs: Json - -```java -sealed interface Json { - enum JsonNull implements Json { NULL } - enum JsonBoolean implements Json { TRUE, FALSE } - record JsonString(String value) implements Json {} - record JsonNumber(Number value) implements Json {} - record JsonObject(Map value) implements Json {} - record JsonArray(List value) implements Json {} -} -``` - ---- - # ADTs: DSLs ```java @@ -620,6 +619,124 @@ --- +# ADTs: Json + +```java +sealed interface Json { + enum JsonNull implements Json { NULL } + enum JsonBoolean implements Json { TRUE, FALSE } + record JsonString(String value) implements Json {} + record JsonNumber(Number value) implements Json {} + record JsonObject(Map value) implements Json {} + record JsonArray(List value) implements Json {} +} +``` + +--- + +# ADTs: Json + +```java +sealed interface Json { + default String asString() { + return switch (this) { + case JsonNull _ -> "null"; + case JsonBoolean b -> switch (b) { + case TRUE -> "true"; + case FALSE -> "false"; + }; + ... + }; + } +} +``` + +--- + +# ADTs: Json + +```java +sealed interface Json { + default String asString() { + return switch (this) { + ... + case JsonString(var value) -> "\"" + value + "\""; + case JsonNumber(var value) -> String.valueOf(value); + ... + }; + } +} +``` + +--- + +# ADTs: Json + +```java +sealed interface Json { + default String asString() { + return switch (this) { + ... + case JsonObject(var map) + -> map.entrySet().stream() + .map(entry -> "\"" + entry.getKey() + "\":" + entry.getValue().asString()) + .collect(joining(",", "{", "}")); + ... + }; + } +} +``` + +--- + +# ADTs: Json + +```java +sealed interface Json { + default String asString() { + return switch (this) { + ... + case JsonArray(var array) + -> array.stream() + .map(Json::asString) + .collect(joining(",", "[", "]")); + }; + } +} +``` + +--- + +# ADTs: Json + +```java +sealed interface Json { + static void main() { + var json = array( + object( + entry("name", string("Toni")), + entry("age", number(46)), + entry("old", JsonBoolean.TRUE)), + object( + entry("name", string("Baby")), + entry("age", JsonNull.NULL), + entry("old", JsonBoolean.FALSE)) + ); + System.out.println(json.asString()); + } +} +``` + +--- + +# ADTs: Json + +```json +[{"old":true,"name":"Toni","age":46},{"old":false,"name":"Baby","age":null}] +``` + +--- + # ADTs: Errores ```java @@ -797,23 +914,25 @@ --- -# ¿Qué falta todavía? +# ¿Qué falta todavía? 🤓 * Tail recursion. * Soporte de tipos de datos primitivos en genericos. + y java todavía no es un lenguaje que se pueda considerar stack safe + aunque en java 23 será posible usar tipos primitivos en pattern matching, todavía no esta + soportado para tipos genericos --> --- -# ¿Preguntas? +# ¿Preguntas? :question: --- -# ¡Gracias! +# ¡Gracias! :sparkling_heart: diff --git a/snippets/Json.java b/snippets/Json.java index 1f401c1..86df8a8 100644 --- a/snippets/Json.java +++ b/snippets/Json.java @@ -53,11 +53,11 @@ } static void main() { - var string = array( + var json = array( object(entry("name", string("Toni")), entry("age", number(46)), entry("old", JsonBoolean.TRUE)), object(entry("name", string("Baby")), entry("age", JsonNull.NULL), entry("old", JsonBoolean.FALSE)) - ).asString(); + ); - System.out.println(string); + System.out.println(json.asString()); } } \ No newline at end of file