Si hablamos de desarrollar aplicaciones web Frontend, es decir aplicaciones para el navegador, es ampliamente conocido que se debe aprender Javascript.
Esto no es lo mismo que pasa en el backend, que se pueden utilizar distintos lenguajes de programación (Go, Java, Rust, PHP, Python, etc) y al final producir el mismo tipo de aplicacion. Porque incluso si aprendes un lenguaje de backend eventualmente si quieres crear un proyecto completo necesitaras aprender Javacript.
Asi que se podria pensar que Javascript es el unico que lenguaje con el que se pueden crear aplicaciones Frontend.
Y claro podrias decir que tambien esta Typescript, pero realmente este es un lenguaje basado en Javascript, asi que aprender Typescript tambien conlleva aprender las reglas de Javascript en gran parte.
Asi que la pregunta es, ¿Realmente hay alternativas a Javascript para aplicaciones Frontend?
Alterantivas a Javascript en el frontend
La respuesta es sí, hay alternativas a Javascript para poder desarrollar aplicaciones para el navegador, solo que como no son muy populares y muchos quizas no las conocen, asi que en este articulo, te daré un resumen de los siguientes lenguajes de programación que puedes utilizar alternativos a Javascript.
- Dart
- Elm
- [Mint lang]
- Reason
- PureScript
Empecemos con el más popular de la Lista, Dart.
Dart
Dart es un lenguaje de programación creado por Google incialmente pensado para ser un reemplazo más moderno Javascript. Incluso hace muchos años atras Google pensaba crear una variante de Chromium, llamada Dartium, que soportara una maquina virtual de Dart integrada dentro del navegador, similar a V8 para Javascript.
Claramente esto no paso, incluso el lenguaje fue ignorado durante muchos años, así que Google no tuvo más remedio que solo hacer que Dart compile a Código de Javascript.
Sin embargo no fue hasta la llegada de Flutter, que Dart pudo encontrar un entorno en donde ser usado.
Para los que no lo sepan, Flutter es un Framework de Dart, que permite crear aplicaciones moviles multiplataforma (iOS, Android), similar a proyectos como React Native en Javascript, de hecho esta inspirado en este. Solo que Flutter no usa conceptos web sino todo el código esta creado en el lenguaje Dart. Lo que permite a desarrolladores moviles no tener que aprender conceptos web primero para poder desarrollar apps moviles multiplataforma.
Y Flutter ha permitido a Dart cumplir en parte su proposito inicial, ya que muy aparte de crear apps moviles, tambien permite convertir esa interfaz movil a una interfaz web, es decir que con Flutter puedes crear con un mismo código de Dart, app moviles para android, ios y tambien apps web
Lo que lo convierte en una opcion para poder crear aplicaciones frontend sin tener que conocer Javascript, ademas que el rendimiento de las interfaces de Flutter es bastante veloz.
Sin embargo tambien tiene desventajas, en cuanto a que las aplicaciones tienen a pesar más, y como su ecosistema a diferencia de Javascript no es tan grande, hay muchas veces que tendras que crear tus propios modulos desde cero.
Y tambien tiene el mismo asunto de las SPA de Javascript, en obtener un buen SEO (Search Engine optimization).
Aun así, esta es una solución bastante llevadera si lo tuyo solo ha sido el mundo movil y ahora tambien quieres crear webs.
- https://techcrunch.com/2015/03/25/google-will-not-integrate-its-dart-programming-language-into-chrome/
- https://google.fandom.com/wiki/Dartium
Elm
Elm es un lenguaje de programación puramente funcional, de tipado fuerte, reactivo, y un lenguaje para crear aplicaciones web cliente dirigido por eventos.
Es decir es como usar Typecript, pero puramente funcional, de hecho si estudias un poco el lenguaje, Algo que quizas notes es su extraña sintaxis como que no hay llaves, se usa mucho las flechas y triangulos.
Ademas de la carencia de sintaxis como bucles for, y los bloques de código tipicos de otros lenguajes.
Y aunque puedes estar pensando que en Javascript Ecmascript 6+ se puede utilizar el paradigma funcional, este tan solo ofrece una parte superficial de lo que es este paradigma.
En Elm, casi todo es una funcion, desde los nombres de Records, hasta incluso los operadores + y - son funciones.
Elm posee es de tipado fuerte, lo que significa que similar a lenguajes como Java o Typescript en donde necesitas especificar tipos de datos:
numFromList: List a -> Int
numFromList list =
List.length list
Aunque Elm no es un lenguaje de proposito general como Java o Javacript (usando Nodejs), sino ser usado tan solo en el navegador. De hecho no solo permite escribir la logica de tus interfaces sino tambien las interfaces a traves de funciones que luego se transfomoran a HTML.
Esto es llamado Elm Architecture ha sido inspiracion de tambien bibliotecas como Redux en Javascript.
Y tambien permite crear interfaces Reactivas, es decir que se actualizan cuando los valores cambian, y dirigida por eventos, similar a como lo permitne hacer frameworks de Javascript.
Aunque una gran desventaja del lenguaje es su documentación, que si bien tiene los aspectos basicos abarcados, hacer funcionalidad más compleja en muchos casos es más dificil encontrar ejemplos.
Mint Lang
Al igual que Elm, Mint es un lenguaje de programacion para crear aplicaciones de una Sola pagina (SPA) para el navegador, de hecho tambien esta inpirado en Elm. La idea que plantean los desarrolladores del lenguaje es tener un entorno de desarrollo más simple y unificado que lo que tiene Javascript.
Es decir Javascript no es un lenguaje nuevo, desde su creación en 1995, el lenguaje a experimentado cambios y mejoras, y al dia de hoy puedes encontrarte proyectos con distintas formas de importar archivos, distintos frameworks han sido creados encima de esto (Angular, Vue, React), e incluso distintas bibliotecas de manejo de estado (Flux, Redux, Recoil, Zustan) y formas de estilizar (style-components, sass, less, etc) javascript, por mencionar algunos casos comunes.
Asi que Mint es un lenguaje de programacion completamente nuevo que ya viene integrado con:
- Routing
- Styling
- State Management
- Components
- Testing
asi que el desarrollador no tiene que buscar bibliotecas de tercero para hacer tareas comunes. Todo el ejecutable pesa al rededor de los 34 mb, y al igual que Elm es un lenguaje de paradigma funcional y de tipado estatico.
ReasonScript
ReasonScript, antes llamado Reason, es otro lenguaje de programación funcional que al final convierte su código a Javascript.
Entre alguna de sus ventajas estan que posee una compilacion rapida, similares a proyectos como esbuild en Javascript.
Tambien es un lenguaje funcional y de tipado estatico, sin embargo si ya usas lenguaje como Typescript, hacer una migracion parece un trabajo innecesario, ademas que hay todo su ecositema de desarrollo esta cambiando mucho y su comunidad no es muy grande.
Web Assembly
Finalmente si bien estos son lenguajes que en su gran mayoria son puramente diseñados desde cero como reemplazo de Javascript, tambien hay otra ruta par usar más lenguajes en el frontend que vienen gracias a Web Assembly, un estandar para navegadores que permite ejecutar progrmas compilados.
Eso hace que actualmente tambien existan proyectos como:
- PyScript, el cual permita ejecutar código de Python en el navegador
- Yew, un framework similar a React en el mundo de Rust
- Blazor, un framework basado en el ecosistema .NET
Por nombrar a algunos, aunque en realidad puedes ejecutar cualquier lenguaje compilado en el navegador ya sea C, C++, Go y muchos otros.
Otras opciones
- Kotlin for Javascript permite trasnpilar código de Kotlin a Javascript, cuenta con librerias nativas para la modificacion de DOM, crear estilos y creación del DOM con puro código Kotlin, y el uso de librerias a traves de NPM como React.
- PureScript