Ir al contenido
learn

JavaScript para desarrolladores C#/Java — Misión

Escribo C# y leo bastante Java, y escribo JavaScript cuando no queda otra: un script de compilación, un componente del frontend de Guitar Alchemist, la configuración de este sitio. Cada vez, la sintaxis me resulta lo bastante familiar como para dejar de prestar atención, y entonces algo me sorprende: un 0 que se convierte en 0.5, un método que pierde su objeto, una copia que no lo es. Quiero aprender las reglas que hay detrás de esas sorpresas, a partir de la especificación y del propio Node.js, en lugar de coleccionarlas bug a bug.

Te manejas bien con C# o Java: clases, interfaces, genéricos, excepciones, colecciones, LINQ o streams. Has leído o escrito algo de JavaScript, y te ha sorprendido. Cada lección parte de lo que ya sabes, muestra dónde JavaScript coincide y dónde difiere, e imprime lo que dice Node.js, errores incluidos.

Este curso es la base de otros dos. Los tipos estáticos corresponden al próximo curso TypeScript para desarrolladores C#/Java, así que este solo menciona TypeScript donde no cambia nada en tiempo de ejecución. El DOM, JSX y los componentes corresponden al curso React (Vite) que sigue a TypeScript, así que este curso ejecuta JavaScript en Node.js y solo mira el navegador como otro entorno anfitrión.

C# Java JavaScript
Especificación Especificación del lenguaje C# Java Language Specification ECMAScript, una nueva edición cada junio
Se ejecuta en el CLR, tras compilar a IL la JVM, tras compilar a bytecode un motor que analiza el código fuente: V8 en Chrome y Node.js, SpiderMonkey en Firefox, JavaScriptCore en Safari
Tipos estáticos estáticos dinámicos: los valores tienen tipos, las variables no
Números int, long, double, decimal… int, long, double… number (un double) y bigint
Valor ausente null null undefined y null
Objetos instancias de clases instancias de clases bolsas de propiedades enlazadas a un prototipo; class se construye sobre eso
Gestor de paquetes NuGet Maven, Gradle npm (o pnpm, Yarn)
Archivo de proyecto .csproj pom.xml, build.gradle package.json
Módulos ensamblados y espacios de nombres paquetes y módulos un módulo por archivo, ES modules o CommonJS

Las lecciones usan código real como material. Cuando una lección cita GuitarAlchemist/ga, lo hace en el commit a826864, en los frontends React ReactComponents/ga-react-components y Apps/ga-client. Esos archivos son TypeScript; las lecciones reducen las líneas que citan a JavaScript puro, que es lo que se ejecuta una vez eliminados los tipos. Este sitio, construido con Astro, es el otro proyecto JavaScript real que examinan las lecciones.

  • instalar Node.js en Windows, Linux y macOS, ejecutar un archivo y gestionar un proyecto con npm;
  • decir si un archivo es un ES module o un módulo CommonJS, y hacer que ambos funcionen juntos;
  • predecir qué hacen ==, +, || e if con cualquier par de valores, y elegir el operador que no sorprende;
  • decir qué es this en cualquier llamada, y conservarlo en un callback;
  • usar prototipos y clases, y copiar y comparar objetos a propósito;
  • escribir código asíncrono con promesas y async/await, y explicar el bucle de eventos;
  • probar, depurar y publicar un paquete Node.js.
# Lección Ya conoces
1 Node.js, npm y módulos dotnet run, NuGet, java, Maven, espacios de nombres
2 Valores y tipos var, readonly/final, double, null, Equals
3 Funciones, ámbito, closures y this métodos, lambdas, delegados, variables capturadas
4 Objetos, prototipos y clases clases, herencia, propiedades, records
5 Arrays, iteración y colecciones (próximamente) List<T>, LINQ, streams, Dictionary, HashMap, IEnumerable, iteradores
6 Errores y excepciones try/catch/finally, tipos de excepción, using y try-with-resources
7 JavaScript asíncrono: el bucle de eventos, las promesas, async/await Task, async/await, CompletableFuture
8 La biblioteca estándar de Node.js: archivos, rutas, streams y procesos System.IO, java.nio.file, Process
9 Pruebas y depuración: node:test, el inspector, ESLint xUnit, JUnit, los depuradores de Visual Studio e IntelliJ, analizadores
10 npm a fondo: versiones, archivos de bloqueo, workspaces, exports y publicación NuGet y Maven Central
11 Texto, expresiones regulares, fechas e Intl Regex, DateTime, java.time, CultureInfo
12 De Node.js al navegador: módulos de script, fetch y bundlers archivos estáticos de ASP.NET, una compilación de frontend
— Diario