107

Importantes cambios a JavaScript propuestos por Microsoft

33834Puntos

hace 2 años

Microsoft está trabajando en una propuesta para soportar tipos como comentarios directamente en JavaScript.

JavaScript como lenguaje de programación, ha evolucionado de forma impresionante y lo puedes encontrar en todos lados, del lado backend con NodeJS, del lado de frontend con increíbles frameworks como: React, Angular, Vue, etc. en IOT con librerías como Johnny-Five hasta puedes crear aplicaciones móviles y de escritorio con tecnologías como electron, Capacitor, React Native, etc.

Sin embargo, la flexibilidad de JavaScript puede producir errores y dolores de cabeza, porque no hay feedback instantáneo al momento de escribir código, solo hasta que lo ejecutas te das cuenta de los errores, puede que un Linter nos ayude, pero no va más a allá del análisis que pueden hacer los lenguajes con soporte a tipos.

Por estas razones, en estos últimos años gran parte del ecosistema, librerías, proyectos y comunidades ha elegido escribir su código en TypeScript, un superset de JavaScript para traer tipado al mundo de JavaScript, ¿Cuál es la razón? Hay grandes ventajas al implementar TypeScript, pero una de las más fuertes es que los lenguajes con soporte a tipado pueden llegar a reducir hasta un 15% de bugs en tus sistemas, según el estudio: To Type or Not to Type: Quantifying Detectable Bugs in JavaScript.

Equipos como Slack y Airbnb han tenido grandes resultados en su implementación, haciendo productos más confiables y equipos más veloces con asombrosos resultados.

En el caso de Slack en su blog de ingeniería “TypeScript at Slack” nos comparte lo siguiente:

Primero, nos sorprendió la cantidad de pequeños errores que encontramos al convertir nuestro código.
Segundo, subestimamos lo poderosa que es la integración con el editor de código.
TypeScript fue una gran ayuda para nuestra estabilidad que empezamos a usarlo para todo el código nuevo a los pocos días de comenzar la implementación.

Airbnb en la conferencia “Adopting Typescript at Scale” nos menciona lo siguiente:

El 38 % de los errores se pueden prevenir con TypeScript según el análisis post mórtem.
Con TypeScript, los ingenieros pueden moverse más rápido y con mayor seguridad.

¿Tipado en JavaScript?

Cada vez que alguien escucha esto puede que tenga un sesgo negativo y piense en lenguajes como Java o C# con un fuerte tipado entonces, tenemos miedo a perder la flexibilidad de JavaScript.

Sin embargo, lenguajes como Python han introducido tipado con éxito en la comunidad y desde la versión 3.5, Pyhton introdujo “Support for type hints” para soportar el tipado y tener herramientas de análisis de código más profundo, prevenir bugs y mejorar la experiencia de los desarrolladores.

Este sería un ejemplo de código en Python con soporte a tipos:

defgreeting(name: str) -> str:return'Hello ' + name

Esta característica ha sido bien recibida por la comunidad y ha traído una familia de herramientas interesantes en el ecosistema de Python que trabajan con tipos como: Fast API, Typer, SqlModel y pydantic entre otras.

Además, según la encuesta anual de StateJS 2021 con más de 16K de respuestas por parte de desarrolladores, el tipado en JavaScript es una de las características que más hace falta en el lenguaje.

La propuesta de Microsoft

Ahora Microsoft propone que se ponga en consideración comentarios como tipos en JavaScript de forma oficial y como parte del lenguaje.

Cuando TypeScript fue lanzado en 2012 teníamos un JavaScript muy diferente y navegadores en desacuerdo sobre el estándar, entonces TypeScript no solo ofrecía un análisis de código y verificación de tipos, sino también transpilar código a una versión estándar de JavaScript que sea soportada en todos los navegadores y entornos.

Pero con el estado actual de JavaScript, el equipo de Microsoft propone que este paso de transpilación puede ser innecesario. La propuesta es evitar este paso extra y que JavaScript tenga una definición de tipos que será evaluada por sistemas de análisis de código pero ignorada al momento de ejecutarlo.

Tipado como comentarios

La propuesta es agregar a JavaScript sintaxis nueva para agregar tipado de forma opcional e ignorada en tiempo de ejecución, entonces podríamos tener código como el siguiente:

functionadd(a: number, b: number) {
    return a + b;
}

Pero ¿Qué significa que el tipado sea tratado como comentarios? Sería algo similar a lo que ya se hace con JSDoc en donde a partir de comentarios se puede agregar verificación de tipos, pero no infiere en como JavaScript opera y se ejecuta, como en el siguiente código:

/**
 * @param a {number}
 * @param b {number}
**/functionadd(a, b) {
    return a + b;
}

Quiere decir que no sería una propuesta invasiva, sino que es una propuesta incremental y viable para la comunidad, además que es agnóstica, es decir, la propuesta NO incluye agregar un paso extra en el análisis de código de JavaScript ni tampoco agregar el compilador de TypeScript como parte del estándar de los navegadores.

Entonces ¿Cómo funcionaría?

La propuesta del equipo de Microsoft es añadir esta nueva sintaxis de tipos nativamente a JavaScript y que con ello herramientas como TypeScript, Flow o algún editor de código como VSCode puede tomar esta nueva sintaxis y agregar el soporte a la verificación de tipos en el momento de desarrollo.

La verificación de tipos lo tendríamos en tiempo de desarrollo, mejorando la experiencia y reduciendo bugs, pero a la hora de ejecutarse en un entorno como un navegador o en el backend con NodeJS es ignorado y no se agrega ninguna capa extra al proceso normal de JavaScript.

El estado de la propuesta

En este momento la propuesta lleva el nombre de “ECMAScript proposal: Types as Comment” y está en etapa 0, será presentada en marzo de 2022 ante el TC39 que es el grupo de empresas, academias, desarrolladores, etc. encargadas de mantener y evolucionar JavaScript, por lo tanto, cualquier mejora o propuesta al lenguaje pasa por este comité, además que debe pasar por 4 etapas para que finalmente sea añadido oficialmente a JavaScript.

Esto significa que hay un camino largo para que sea aprobado y muchas propuestas pueden quedar en etapa 0, sin embargo, características como: las array functions, destructuring, async/await, Nullish coalescing, etc. también pasaron por este proceso.

Cuéntame, ¿Qué te parece esta propuesta por parte de Microsoft? Te leo en los comentarios. 👇

Nicolas
Nicolas
nicobytes

33834Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
11
70059Puntos

Es una gran idea, a pesar de que tenemos TS, no hay que descuidar JS y es una muy buena propuesta para potenciarlo.

1
5183Puntos
2 años

Completamente, tocayo.
Le tengo gran cariño a JS pq fue el primer lenguaje que aprendí, pero sí está difícil usar JS Vanilla en cualquier proyecto, ya que su tipado flexible no te da la seguridad de que en producción no se vaya a crashear. Que se pueda integrar el sistema de tipado como una feature no invasiva en JS Vanilla sería lo ideal, tanto para los nuevos que no quieren enroscarse en eso, como para los que queremos codear con la seguridad de no tener bugs 😃

6
44421Puntos

La mayoría de los devs pasan de lado las etapas previas al desarrollo de software, considerando este cambio como revolucionario o “lo que le faltaba a JS”.

Siendo honestos, no damos ese esfuerzo al debatir código, su implementación y enfoque con herramientas visuales en alto nivel de UML.

No me mal interpreten, me encanta este característica pero no debemos dejar ver este enfoque:

JSDoc es documentación de código y muchos lo confunden con comentarios, adicionando un lista considerable de malas prácticas de programación como, por ejemplo, promise vs async/await, siempre const vs let, etc.

Si le dedicamos un poco más de tiempo a esta etapa de análisis, podríamos implementar un enfoque del 70/análisis - 20/desarrollo - 10/pruebas.

Espero que este conjunto de características, nos permitan madurar a los devs para dar ese esfuerzo para saber … lo que hace su código y su implicación en conjunto.

Saludos y excelente post 🤟

3
2 años

Estoy completamente de acuerdo contigo.

Muchas veces, bien sea por cuestiones de tiempo, o por simples malas prácticas, en las empresas se descuida el llevar una documentación limpia. No se dedica el tiempo correcto al análisis, y simplemente se va directo a la codificación, sin pensar que es una práctica que tarde o temprano puede volverse insostenible por lo complejo que se vuelve la escalabilidad al no contar con un manual que nos permita entender que se hizo en el código.

Las herramientas (lenguajes de programación) de un desarrollador deben evolucionar, pero, el desarrollador no debe centrarse solo en utilizar la herramienta como le plazca, sino en trazar un plan efectivo para el mejor uso de esta.

2
7063Puntos
2 años

Excelente comentario, estoy de acuerdo contigo.

3
1468Puntos

Me parece perfecto, aunque creo que si sucede, me darían ganas de typar mis códigos viejos

1
5183Puntos
2 años

JAJAJAJASJS X2 bro

3
61686Puntos

Es lo que le hace falta a JS, me gusta la idea, esperemos y se concrete.

2
4322Puntos

Me parece (personalmente) buena idea esta implementación en la Sintaxis, me recuerda a Python!

functionadd(a: number, b: number) {
    return a + b;
}

Habrá que ver si llega a pasar de la Etapa 0 del ECMAScript.

2
1387Puntos

Cuando conocí Javascript me cayo mal.

En esos tiempos se veía como un lenguaje que permitía algo de dinamismo en las paginas, y que cada quien implementaba con pequeñas diferencias en sus navegadores (no había nodejs)

Lo que más me molestaba era la falta de tipado. Uno tenía que tener cuidado para no hacerse bolas pues un error no se veía sino hasta que se ejecutaba el código.

Ahora bien, cuanto conocí TypeScript me parecio que TypeScript era lo que debió ser javascript desde el principio.

No me extraña que haya sido bien aceptado ni tampoco me sorprende que Microsoft crea que los tipos deban integrarse al lenguaje.

La verdad yo espero que se haga lo de la incorporación de los tipos y que se haga en colaboración con Microsoft. Esto pues esta claro que la experiencia con TypeScript le aportaría mucho a la tipificación en Javascript.

1

Quitar la parte de compilar que utiliza TS y que JavaScript lo haga nativamente esta increíble. ayudaría al manejo de errores y mejoraría el rendimiento al momento de Probar el código.

1
2 años

imaginate nomas escribir de nuevo los backends especialmente los que estan hecho en nest 😦

1
5183Puntos

Sí es cierto que TypeScript ha superado completamente sus bases.
No he usado JS Vanilla desde que aprendí sus fundamentos, ya que una vez que aprendí TypeScript me pareció fundamental el sistema de tipado. Estaría bueno que esta feature sea integrada de forma no invasiva a JS por defecto, así los iniciados no se estancarían intentando hacerlo todo 100% bugs free y los que nos dedicamos al software development podríamos codear con más seguridad sin necesidad de integrar TS en el stack 😃

1
33146Puntos

Sería genial tener esta opción, hay varias proyectos en los cuales agregar un tipado puede generar problemas, con esto, podría ser incremental y a medida que se refactoriza ir agregar estos tipados/comentarios. Ojalá logre pasar las etapas.

1
13681Puntos

Creo que es una excelente propuesta. Que permitira seguir fortalenciendo JS.

1
22609Puntos

Precisamente en mi anterior proyecto utilice TypeScript y fue amor a primera vista, el hecho que se desarrolle sintaxis en Js sería excelente en la practica, los errores que nos vamos a ahorrar en el transcurso del tiempo va a ser muy favorable.

1
8453Puntos

Siendo honesto, no conozco mucho sobre TypeScript, vengo de Java, y sinceramente, me fastidiaba mucho ciertos errores que cometía por la falta de tipado, (Repito, venía de un lenguaje fuertemente tipado), por lo cual adopte TS solamente por la capacidad que tiene su sintaxis de ser detectada por errores de tipos en VS Code, de momento aún no me he adentrado más a estudiar TS.
En conclusión, a JS le hace gran falta, aunque sea un tipado básico para evitar una gran cantidad de errores de typos

1
16793Puntos

Una gran propuesta para la mejora y crecimiento de js.!!!

1
967Puntos

la verdad me gusta la prupuesta!!

1
33689Puntos

Excelente iniciativa, muchas gracias por compartir.
Me sigue gustando más Python aunque ya se que son muy diferentes y se complementan los dos.

1
312Puntos

Es interesante la conclusión que llego Microsoft para mejorar y optimizar más Js… Lo veo muy bien… Espero poderlo ver pronto.

1
15187Puntos

Es una gran idea, ahorrar el proceso de transpilación y agregar el soporte a tipos de forma nativa, habrá que ver lo que pasa.
Gracias por compartir 👍

1
29642Puntos

Esto es exactamente lo que se hace con PHP y PHPDocs

1
23139Puntos

Super interesante.

1
32884Puntos

Exelente informacion