Roadmap per gli sviluppatori Python che apprendono C#

C# e Python condividono concetti simili. Questi costrutti familiari consentono di apprendere C# quando si conosce già Python.

  1. Orientato agli oggetti: sia Python che C# sono linguaggi orientati agli oggetti. Tutti i concetti relativi alle classi in Python si applicano in C#, anche se la sintassi è diversa.
  2. Multipiattaforma: sia Python che C# sono linguaggi multipiattaforma. Le app scritte in entrambi i linguaggi possono essere eseguite su molte piattaforme.
  3. Garbage Collection: entrambi i linguaggi usano la gestione automatica della memoria tramite Garbage Collection. Il runtime recupera la memoria dagli oggetti a cui non si fa riferimento.
  4. Fortemente tipizzato: sia Python che C# sono linguaggi fortemente tipizzati. La coercizione tipizzata non si verifica in modo implicito. Sono presenti delle differenze che vengono descritte più avanti, perché C# viene tipizzato in modo statico mentre Python viene tipizzato in modo dinamico.
  5. Async / Await: la funzionalità async e await di Python è stata ispirata direttamente dal supporto async e await di C#.
  6. Criteri di ricerca: l'espressione match e i criteri di ricerca di Python sono simili all'espressione dei criteri di ricerca switch di C#. È possibile usarli per esaminare un'espressione di dati complessa per determinare se corrisponde a un criterio.
  7. Parole chiave delle istruzioni: Python e C# condividono molte parole chiave, ad esempio if, else, while, for e molte altre. Anche se non tutta la sintassi è la stessa, è possibile leggere C# se si conosce Python.

Quando si inizia a imparare C#, si apprenderà questi concetti importanti in cui C# è diverso da Python:

  1. Rientro e token: in Python, le nuove righe e il rientro sono elementi sintattici di prima classe. In C# lo spazio vuoto non è significativo. Token, come ; separano le istruzioni e altri token { e } controllano l’ambito del blocco per if e altre istruzioni di blocco. Tuttavia, per migliorare la leggibilità, la maggior parte degli stili di codice, incluso lo stile usato in questi documenti, usa il rientro per rafforzare gli ambiti del blocco dichiarati da { e }.
  2. Tipizzazione statica: in C#, una dichiarazione variabile include il relativo tipo. La riassegnazione di una variabile a un oggetto di tipo diverso genera un errore del compilatore. In Python, il tipo può cambiare quando viene riassegnato.
  3. Tipi nullable: le variabili C# possono essere nullable o non nullable. Un tipo non nullable è uno che non può essere null (o niente). Fa sempre riferimento a un oggetto valido. Al contrario, un tipo nullable può fare riferimento a un oggetto valido o null.
  4. LINQ: le parole chiave dell'espressione di query che costituiscono LINQ (Language Integrated Query) non sono parole chiave in Python. Tuttavia, le librerie Python come itertools, more-itertools e py-linq offrono funzionalità simili.
  5. Generics: i generics di C# usano la digitazione statica C# per creare asserzioni sugli argomenti forniti per i parametri di tipo. Un algoritmo generic potrebbe dover specificare vincoli che un tipo di argomento deve soddisfare.

Infine, esistono alcune funzionalità di Python che non sono disponibili in C#:

  1. Tipizzazione strutturale (o ad anatra): in C#, i tipi hanno nomi e dichiarazioni. Ad eccezione delle tuple, i tipi con la stessa struttura non sono intercambiabili.
  2. REPL: C# non dispone di un ciclo REPL (Read-Eval-Print Loop) per creare rapidamente prototipi di soluzioni.
  3. Spazi vuoti significativi: è necessario usare correttamente parentesi graffe { e } per prendere nota dell'ambito del blocco.

Imparare C# se si conosce Python è facile. I linguaggi hanno concetti simili e idiomi simili da usare.