JavaScript pour développeurs C#/Java — Mission
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
Pourquoi j’apprends ça
Section intitulée « Pourquoi j’apprends ça »J’écris du C# et je lis beaucoup de Java, et j’écris du JavaScript quand je n’ai pas le choix : un script de build, un composant du front end de Guitar Alchemist, la configuration de ce site.
À chaque fois, la syntaxe paraît assez familière pour que je cesse d’y prêter attention, et puis quelque chose me surprend : un 0 qui devient 0.5, une méthode qui perd son objet, une copie qui n’en est pas une.
Je veux apprendre les règles derrière ces surprises, à partir de la spécification et de Node.js lui-même, au lieu de les collectionner un bug à la fois.
À qui s’adresse ce cours
Section intitulée « À qui s’adresse ce cours »Tu es à l’aise avec C# ou Java : classes, interfaces, génériques, exceptions, collections, LINQ ou streams. Tu as lu ou écrit un peu de JavaScript, et il t’a surpris. Chaque leçon part de ce que tu connais déjà, montre où JavaScript est d’accord et où il diffère, et affiche ce que dit Node.js, y compris ses erreurs.
Ce cours sert de base à deux autres. Les types statiques appartiennent au futur cours TypeScript pour développeurs C#/Java, si bien que celui-ci ne mentionne TypeScript que là où il ne change rien à l’exécution. Le DOM, JSX et les composants appartiennent au cours React (Vite) qui suit TypeScript, si bien que ce cours exécute JavaScript dans Node.js et ne regarde le navigateur que comme un autre hôte.
JavaScript en un tableau
Section intitulée « JavaScript en un tableau »| C# | Java | JavaScript | |
|---|---|---|---|
| Spécification | Spécification du langage C# | Java Language Specification | ECMAScript, une nouvelle édition chaque mois de juin |
| S’exécute sur | le CLR, après compilation en IL | la JVM, après compilation en bytecode | un moteur qui analyse le source : V8 dans Chrome et Node.js, SpiderMonkey dans Firefox, JavaScriptCore dans Safari |
| Types | statiques | statiques | dynamiques : les valeurs ont des types, les variables non |
| Nombres | int, long, double, decimal… |
int, long, double… |
number (un double) et bigint |
| Valeur absente | null |
null |
undefined et null |
| Objets | instances de classes | instances de classes | sacs de propriétés reliés à un prototype ; class s’appuie dessus |
| Gestionnaire de packages | NuGet | Maven, Gradle | npm (ou pnpm, Yarn) |
| Fichier de projet | .csproj |
pom.xml, build.gradle |
package.json |
| Modules | assemblies et espaces de noms | packages et modules | un module par fichier, modules ES ou CommonJS |
Les données
Section intitulée « Les données »Les leçons prennent du vrai code comme matériau. Quand une leçon cite GuitarAlchemist/ga, c’est au commit a826864, dans les front ends React ReactComponents/ga-react-components et Apps/ga-client. Ces fichiers sont en TypeScript ; les leçons réduisent les lignes qu’elles citent à du JavaScript simple, qui est ce qui s’exécute une fois les types retirés. Ce site, construit avec Astro, est l’autre vrai projet JavaScript que regardent les leçons.
À la fin de ce cours, je saurai
Section intitulée « À la fin de ce cours, je saurai »- installer Node.js sous Windows, Linux et macOS, exécuter un fichier, et gérer un projet avec npm ;
- dire si un fichier est un module ES ou un module CommonJS, et faire fonctionner les deux ensemble ;
- prédire ce que font
==,+,||etifavec n’importe quelle paire de valeurs, et choisir l’opérateur qui ne surprend pas ; - dire ce qu’est
thisdans n’importe quel appel, et le conserver dans un callback ; - utiliser les prototypes et les classes, et copier et comparer des objets en connaissance de cause ;
- écrire du code asynchrone avec les promesses et
async/await, et expliquer la boucle d’événements ; - tester, déboguer et publier un package Node.js.
| # | Leçon | Tu connais déjà |
|---|---|---|
| 1 | Node.js, npm et modules | dotnet run, NuGet, java, Maven, espaces de noms |
| 2 | Valeurs et types | var, readonly/final, double, null, Equals |
| 3 | Fonctions, portée, closures et this |
méthodes, lambdas, délégués, variables capturées |
| 4 | Objets, prototypes et classes | classes, héritage, propriétés, records |
| 5 | Tableaux, itération et collections (à venir) | List<T>, LINQ, streams, Dictionary, HashMap, IEnumerable, itérateurs |
| 6 | Erreurs et exceptions | try/catch/finally, types d’exceptions, using et try-with-resources |
| 7 | JavaScript asynchrone : la boucle d’événements, les promesses, async/await |
Task, async/await, CompletableFuture |
| 8 | La bibliothèque standard de Node.js : fichiers, chemins, streams et processus | System.IO, java.nio.file, Process |
| 9 | Tests et débogage : node:test, l’inspecteur, ESLint |
xUnit, JUnit, les débogueurs de Visual Studio et d’IntelliJ, analyseurs |
| 10 | npm en profondeur : versions, fichiers de verrouillage, workspaces, exports et publication |
NuGet et Maven Central |
| 11 | Texte, expressions régulières, dates et Intl |
Regex, DateTime, java.time, CultureInfo |
| 12 | De Node.js au navigateur : modules de script, fetch et bundlers |
fichiers statiques ASP.NET, un build front end |
| — | Journal |