JavaScript para desarrolladores C#/Java — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué aprendo esto
Sección titulada «Por qué aprendo esto»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.
Para quién es este curso
Sección titulada «Para quién es este curso»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.
JavaScript en una tabla
Sección titulada «JavaScript en una tabla»| 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 |
Los datos
Sección titulada «Los datos»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.
Al final de este curso, sabré
Sección titulada «Al final de este curso, sabré»- 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
==,+,||eifcon cualquier par de valores, y elegir el operador que no sorprende; - decir qué es
thisen 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 |