Condividi tramite


Roadmap per sviluppatori JavaScript e TypeScript che apprendono C#

C#, TypeScript e JavaScript sono tutti membri della famiglia di linguaggi C. Le analogie tra i linguaggi consentono di diventare rapidamente produttivi in C#.

  1. Sintassi simile: JavaScript, TypeScript e C# si trovano nella famiglia di linguaggi C. Questa somiglianza significa che è già possibile leggere e comprendere C#. Esistono alcune differenze, ma la maggior parte della sintassi è simile a JavaScript e C. Le parentesi graffe e i punti e virgola sono familiari. Le istruzioni di controllo come if, else, switch sono uguali. Le istruzioni di ciclo di for, whilee do...while sono uguali. Le stesse parole chiave per class e interface si trovano sia in C# che in TypeScript. I modificatori di accesso in TypeScript e C#, da public a private, sono gli stessi.
  2. Token=>: tutti i linguaggi supportano definizioni di funzioni leggere. In C#, sono denominate espressioni lambda, in JavaScript, in genere sono chiamate funzioni freccia.
  3. Gerarchie di funzioni: tutti e tre i linguaggi supportano funzioni locali, che sono funzioni definite in altre funzioni.
  4. Async/Await: tutti e tre i linguaggi condividono le stesse async parole chiave e await per la programmazione asincrona.
  5. Garbage Collection: tutti e tre i linguaggi si basano su un Garbage Collector per la gestione automatica della memoria.
  6. Modello di evento: la sintassi di event C#è simile al modello JavaScript per gli eventi DOM (Document Object Model).
  7. Gestione pacchetti: NuGet è la gestione pacchetti più comune per C# e .NET, simile a npm per le applicazioni JavaScript. Le librerie C# vengono distribuite negli assembly.

Man mano che si apprende C#, si apprenderà i concetti che non fanno parte di JavaScript. Alcuni di questi concetti potrebbero essere familiari se si usa TypeScript:

  1. C# Type System: C# è un linguaggio fortemente tipizzato. Ogni variabile ha un tipo e tale tipo non può cambiare. Si definiscono i tipi class o struct. È possibile definire interface definizioni che definiscono il comportamento implementato da altri tipi. TypeScript include molti di questi concetti, ma poiché TypeScript è basato su JavaScript, il sistema dei tipi non è così rigoroso.
  2. Pattern matching: la corrispondenza di pattern consente istruzioni condizionali ed espressioni concise in base alla forma di strutture di dati complesse. L'espressioneis controlla se una variabile "è" un modello. L'espressione basata su switch criteri fornisce una sintassi avanzata per esaminare una variabile e prendere decisioni in base alle relative caratteristiche.
  3. Interpolazione di stringhe e valori letterali stringa non elaborati: l'interpolazione di stringhe consente di inserire espressioni valutate in una stringa, anziché usare identificatori posizionali. I valori letterali stringa non elaborati consentono di ridurre al minimo le sequenze di escape nel testo.
  4. Tipi nullable e non nullable: C# supporta tipi valore nullable e tipi riferimento nullable aggiungendo il ? suffisso a un tipo. Per i tipi nullable, il compilatore avvisa se non si cerca null prima di dereferenziare l'espressione. Per i tipi non annullabili, il compilatore avvisa sul possibile assegnamento di un null valore a quella variabile. Queste funzionalità possono ridurre al minimo l'applicazione che genera un'eccezione System.NullReferenceException. La sintassi potrebbe essere nota dall'uso di ? in TypeScript per le proprietà facoltative.
  5. LINQ: linQ (Language Integrated Query) fornisce una sintassi comune per eseguire query e trasformare i dati, indipendentemente dalla relativa risorsa di archiviazione.

Man mano che si apprendono altre differenze diventano evidenti, ma molte di queste differenze sono più piccole nell'ambito.

Alcune funzionalità e idiomi familiari di JavaScript e TypeScript non sono disponibili in C#:

  1. tipi dinamici: C# usa la digitazione statica. Una dichiarazione di variabile include il tipo e tale tipo non può cambiare. Esiste un tipo in C# che fornisce l'associazione dynamic di runtime.
  2. Ereditarietà prototipale: l'ereditarietà C# fa parte della dichiarazione di tipo. Una dichiarazione C# class indica qualsiasi classe di base. In JavaScript è possibile impostare la __proto__ proprietà per impostare il tipo di base in qualsiasi istanza.
  3. Linguaggio interpretato: il codice C# deve essere compilato prima di eseguirlo. Il codice JavaScript può essere eseguito direttamente nel browser.

Inoltre, alcune altre funzionalità di TypeScript non sono disponibili in C#:

  1. Tipi di unione: C# non supporta i tipi di unione. Tuttavia, le proposte di progettazione sono in corso.
  2. Decorator: C# non dispone di decorator. Alcuni elementi decorator comuni, ad esempio @sealed sono parole chiave riservate in C#. Altri elementi Decorator comuni potrebbero avere attributi corrispondenti. Per altri decorator, è possibile creare attributi personalizzati.
  3. Sintassi più tollerante: il compilatore C# analizza il codice in modo più rigoroso di quanto richieda JavaScript.

Se si sta creando un'applicazione Web, è consigliabile usare Blazor per compilare l'applicazione. Blazor è un framework Web full-stack compilato per .NET e C#. I componenti Blazor possono essere eseguiti nel server, come assembly .NET o nel client tramite WebAssembly. Blazor supporta l'interoperabilità con le librerie JavaScript o TypeScript preferite.