Visual Studio 2022 Preview 4.0 + Visual Studio 2019 versione 16.11.3

E’ uscito l’aggiornamento di Visual Studio 2022 alla Preview 4.0. Ci avviciniamo alla release finale… Dato che questa è prevista per il mese di novembre, ci possiamo aspettare ancora una Preview 5.0 il mese prossimo.

“Chi si ferma è perduto” (cit.)

Ah, è uscito anche un aggiornamento di Visual Studio 2019, alla versione 16.11.3, ma ormai in questo prodotto ci saranno poche novità, soprattutto correzioni a bug (salvo che non vengano aggiunte nuove funzionalità rese disponibili con Visual Studio 2022, ma è abbastanza improbabile)

image

Aggiornamento del libro "PROGRAMMARE IN C# 10 – Tecniche di base" (Preview e Early Bird edition)

Pubblicato il 7° capitolo del libro “PROGRAMMARE IN C# 10 – Tecniche di base“: https://mdeghetto.gumroad.com/l/Cs10vol1

Il libro è distribuito in PDF con la formula “Early Bird“: al momento è acquistabile a 10 €, con la pubblicazione dell’8° capitolo passerà a 12 € ma chi l’ha già acquistato potrà avere tutti gli aggiornamenti (fino al libro completo) senza sovrapprezzo.

Una preview gratuita con i primi 4 capitoli è disponibile qui: https://mdeghetto.gumroad.com/l/previewcsharp1

Ecco il piano di massima delle pubblicazioni (le tempistiche dipendono da molti fattori):

Capitoli già pubblicati:

1) primo contatto
2) da .NET Framework a .NET 6
3) IDE
4) finestre di Visual Studio 2022
5) menu di Visual Studio 2022
6) barre comandi di VS 2022
7) scrivere il codice

Prossimi capitoli:

8) Code Snippet
9) variabili e costanti
10) operatori
11) tipi di dati
12) matrici
13) linguaggio C#
14) stringhe
15) OOP: classi e oggetti
16) OOP: incapsulamento
17) OOP: ereditarietà
18) OOP: polimorfismo
19) enumeratori
20) gestione errori (eccezioni)
21) WinForms: Form Designer
22) WinForms: i form
23) WinForms: i controlli
24) WinForms: dialoghi e menu
25) WPF: il Designer
26) WPF: controlli
27) …
Appendice A) Tabella tipi di dati
Appendice B) Corrispondenze dei tipi
Appendice C) Tabella MaskedTextBox

Aggiornamento sul libro "Programmare in C# 10 – Tecniche di base" (versione italiana)

Ho appena pubblicato il 4° capitolo del libro, se non lo avete ancora fatto potete scaricarlo gratuitamente da questa “preview”:

https://mdeghetto.gumroad.com/l/previewcsharp1

ATTENZIONE: questa è l’ULTIMA PREVIEW!!!

Dal prossimo capitolo, il libro sarà distribuito con la formula “Early Bird” a questo indirizzo:

https://mdeghetto.gumroad.com/l/Cs10vol1

Cosa significa “Early Bird”? Significa che da adesso e per alcuni capitoli potrete scaricare il libro in formato PDF al prezzo di soli 10 Euro. Più avanti il prezzo aumenterà diverse volte, fino alla pubblicazione finale che sarà a prezzo pieno (40 Euro), ma chi l’avrà acquistato prima potrà avere gli aggiornamenti del libro fino alla versione finale senza pagare nemmeno 1 Euro in più!

Buona lettura!

Libro "Design of Relational Databases" (preview) – versione inglese

English version: https://deghettoen.wordpress.com/2021/08/22/book-relational-database-design-theory-and-practice-preview/

 

Ho pubblicato il primo capitolo del mio libro “Design of Relational Databases”, spero che vi piaccia.

Cover

Per progettare correttamente un database relazionale non si può cedere all’improvvisazione e alla superficialità: è necessario adottare una metodologia consolidata in grado di garantire un risultato robusto e privo di errori che permetta anche una facile manutenzione nel tempo. Ecco perché in questo libro troverete argomenti teorici da applicare sul campo: algebra relazionale, progettazione concettuale, logica e fisica, diagrammi entità/relazione, normalizzazione, vincoli di integrità relazionale e linguaggio SQL. Il tutto è completato da un ampio capitolo su un esempio concreto di un database progettato passo dopo passo per un’applicazione aziendale. Un testo da tenere nella vostra postazione di lavoro, ma anche perfetto per i corsi di progettazione di database nelle scuole superiori e nelle università.

[VB] Valutatore di espressioni a runtime

Nelle mie esplorazioni su CodeProject ho trovato un altro progetto interessante: un valutatore di espressioni a runtime per Visual Basic.
Questo progetto ha la sua origine in un articolo piuttosto vecchio, poi aggiornato ed esteso nel 2007, ma sempre molto utile quando c’è la necessità di valutare espressioni a runtime. Questo articolo risolve il problema con una vasta gamma di operatori riconosciuti.

Sample image Sample image

Sample image

[ANNULLATO] Sostenete il mio progetto! (Campagna di crowdfunding)

AGGIORNAMENTO: la campagna di crowdfunding è annullata. Dopo una settimana avevo ricevuto pochissime adesioni e quindi non c’erano speranze di arrivare al traguardo in un mese. Pazienza, lasciamo perdere…


English version: https://deghettoen.wordpress.com/2021/08/16/support-my-project-crowdfunding-campaign/


Salve a tutti, vi invito a visitare la seguente pagina, dove ho avviato una raccolta fondi per realizzare il mio progetto di traduzione in inglese di una serie di libri di programmazione in C#:

https://www.kickstarter.com/projects/mariodeghetto/traduzione-manuali-di-programmazione-c?ref=project_build

I costi di traduzione sono sempre stati molto alti e di solito sono le case editrici tradizionali che se ne occupano, quando valutano che un libro ha il potenziale per essere venduto in tutto il mondo. Ovviamente questo non è il mio caso, dato che ho lasciato la casa editrice che mi seguiva per una formula di self publishing “misto”, dove gran parte del lavoro è svolta direttamente da me (redazione, grafica, impaginazione dell’interno ecc.), mentre alcuni servizi li ho demandati a un “service” che è Youcanprint.it (copertina, distribuzione, stampa on demand, eventuali servizi di traduzione ecc.).

Ecco quindi che ho avuto l’idea di avviare una raccolta fondi per far tradurre in modo professionale i prossimi miei libri sulla programmazione C# che, nella mia ideazione attuale, dovrebbero essere almeno 3: tecniche di base, tecniche avanzate e “dati/database e algoritmi”.

Mi aiutate anche solo a diffondere questo progetto nelle community tecniche o con vostri colleghi, amici, conoscenti in modo da permettermi di raggiungere l’obiettivo? Il progetto termina il 15 settembre. Grazie!

Immagine del progetto per Translation of C# programming books

Aggiornati Visual Studio 2017, 2019 e Preview 2022

Anche ad agosto Microsoft ha rilasciato vari aggiornamenti di Visual Studio.

Per Visual Studio 2017 un aggiornamento alla versione 15.9.37, ma solo per risolvere alcuni problemi molto specifici, quindi si tratta solo di una manutenzione minima.

Per Visual Studio 2019 gli aggiornamenti portano alla versione 16.11.0, con cambiamenti al Menu ?, agli strumenti Git e al linguaggio C++. Questo aggiornamento introduce anche una importante funzionalità: Hot Reload per la modifica del codice .NET in fase di esecuzione, analogamente a quello che si potrà fare con Visual Studio 2022.

image

Visual Studio 2022 passa invece alla Preview 3, quindi un nuovo salto importante verso la release finale prevista per novembre. Alla pagina delle note di release non è ancora stata inserita la Preview 3, per cui dobbiamo fare riferimento al post uscito nel blog del team di sviluppo di Microsoft. Qui possiamo trovare un video YouTube che illustra le novità principali, tra le quali una nuova finestra delle proprietà dell’applicazione e nuovi tipi di breakpoint.

(Preview gratuita) Il mio nuovo libro "Programmare in C# – Tecniche di base"

English version of this post

Pubblicata la preview gratuita dei primi capitoli del mio prossimo libro “Programmare in C# – Tecniche di base”:

https://mdeghetto.gumroad.com/l/previewcsharp1

Per il momento c’è solo il primo capitolo, ma se lo “acquistate” (al prezzo di 0,00 Euro) verrete informati via mail dei successivi aggiornamenti.

Dopo la pubblicazione di una certa quantità di capitoli, il libro sarà distribuito con la formula “early bird”, con prezzo crescente in base allo stato di avanzamento, quindi prima lo acquistate e meno lo pagate. Anche in questo caso sarete informati via mail degli aggiornamenti, per scaricare la nuova versione del libro, fino alla sua stesura finale.

Preview_copertina

Scuse…

In merito all’articolo che ho pubblicato su Gumroad.com e che avevo annunciato con questo post:

https://deghetto.wordpress.com/2020/09/22/articolo-sulla-creazione-di-uno-user-control-in-visual-basic-2019/

ho dovuto ritirare l’articolo e rimetterlo in revisione, per trovare una diversa soluzione, perché quella esposta non funziona più.

Dato che tre miei lettori l’avevano acquistato, ho inviato loro questa lettera di scuse, perché ritengo doveroso mantenere un atteggiamento corretto e rispettoso di chi mi segue, magari da tanti anni.

Buongiorno,

ho appena notato che qualche tempo fa ha acquistato il mio articolo al prezzo di 0,99 Euro.

L’articolo era una riedizione di un articolo di un po’ di tempo fa e sinceramente non avevo verificato di nuovo gli esempi che avevo utilizzato.

Revisionando l’articolo per farne una edizione in inglese ho scoperto che con il PowerPack non è più possibile vedere in modo visuale gli oggetti OvalShape nel Designer di Windows Form e quindi l’articolo non è più strutturato correttamente, perché non aderente alla situazione attuale.

Mi scuso moltissimo per non averlo verificato di nuovo e sto cercando di trovare delle alternative per riscriverlo in altre modalità che non snaturino gli esempi che ho fatto. Probabilmente il disegno del semaforo dovrò rifarlo da codice oppure dovrò utilizzare un modo completamente diverso.

Dato che non sono il tipo che “tira bidoni” (anche se per pochi soldi, ma è il principio che conta), le chiedo se è interessato ad aspettare la nuova versione dell’articolo: in caso contrario farò un rimborso del prezzo con lo stesso canale (Gumroad.com).

Scusandomi ancora umilmente, le porgo un augurio di buona domenica.

Mario De Ghetto

[ENG] Review of book "Functional Programming in C#, Second Edition"

image

The functional programming paradigm is not new, as it originated in the 1950s, using concepts developed in the 1930s. Functional languages have continued to develop in academia, while the object-oriented programming (OOP) paradigm has become widespread in the commercial sector. C# also started out as an OOP language, first appearing in 2002 along with .NET.


The turning point came in 2005, when LINQ was introduced, as well as F#, a predominantly functional language developed in the Microsoft Research labs. LINQ is a library that allows data sets to be manipulated with keywords that recall those of SQL and using a functional approach.


Suddenly, developers of commercial applications also became aware of functional programming and its advantages: more concise and cleaner code, less error generation, immutability of variables leading to the elimination of side effects and easier concurrent programming (multithreading).


In all subsequent versions of C#, further functional programming techniques have been introduced, going hand in hand with the implementation of further functional features in F#. The fact that C# can also be used in multiple platforms (desktop, web, mobile with Xamarin) and in multiple operating systems (Windows, Mac and Linux with Mono) means that functional techniques are increasingly being adopted by developers who are testing the qualities of this paradigm for themselves.


The book “Functional Programming in C#” (second edition) has the merit of putting in order all the concepts of functional programming applied to the C# language, also making an in-depth comparison with OOP and imperative programming. In fact, at macro level we program in OOP, while at micro level (within methods) we program imperative. Functional programming in C# makes it possible to unhinge both paradigms, making applications much more readable, more correct and easier to maintain.


The LINQ library is often referred to throughout the book, because it allows the concepts to be explained in the simplest way, as the LINQ library has now become part of the “basic skills” of any C# developer.


At the end of each chapter there are exercises which the reader is asked to do: this is an interesting and effective idea which transforms the book into a practical course on functional programming in C#.


In conclusion, this is the only book that succeeds in condensing functional programming into easy-to-understand examples, bringing it closer to many developers who did not know it or thought it too complex to learn and manage. Recommended for those who want to develop virtually error-free applications effectively and efficiently.

[ITA] Recensione del libro "Functional Programming in C#, Second Edition"

image

Il paradigma della programmazione funzionale non è una novità, perché è nato negli anni ’50, utilizzando concetti sviluppati negli anni ’30. I linguaggi funzionali hanno poi continuato a svilupparsi in ambito accademico, mentre nell’ambito commerciale si è diffuso il paradigma della programmazione orientata agli oggetti (OOP). Anche C# è nato come linguaggio OOP, alla sua prima comparsa nel 2002 insieme a .NET.

Il punto di svolta c’è stato nel 2005, quando è stato introdotto LINQ e anche il linguaggio F#, un linguaggio prevalentemente funzionale sviluppato nei laboratori di Microsoft Research. LINQ è una libreria che permette di manipolare insiemi di dati con delle keyword che richiamano quelle di SQL e utilizzando un approccio funzionale.

Improvvisamente anche gli sviluppatori di applicazioni commerciali hanno iniziato a conoscere la programmazione funzionale e i suoi vantaggi: codice più conciso e pulito, minore produzione di errori, immutabilità delle variabili che comporta l’eliminazione di effetti collaterali e una maggiore facilità nella programmazione concorrente (multithreading).

In tutte le versioni successive di C# sono state introdotte ulteriori tecniche di programmazione funzionale, andando pari-passo con l’implementazione in F# di ulteriori caratteristiche funzionali. Il fatto che C# possa essere utilizzato anche in più piattaforme (desktop, web, mobile con Xamarin) e in più sistemi operativi (Windows, Mac e Linux con Mono) comporta una sempre maggiore adozione delle tecniche funzionali da parte degli sviluppatori che stanno testando con mano le qualità di questo paradigma.

Il libro “Functional Programming in C#” (seconda edizione) ha il pregio di mettere in ordine tutti i concetti della programmazione funzionale applicata al linguaggio C#, facendo anche un approfondito confronto con la OOP e con la programmazione imperativa. Infatti a livello macro programmiamo in OOP, mentre a livello micro (all’interno dei metodi) programmiamo imperativo. La programmazione funzionale in C# permette di scardinare entrambi i paradigmi, rendendo le applicazioni molto più leggibili, più corrette e più facili da gestire in fase di manutenzione.

Nel libro è richiamata spesso la libreria di LINQ, perché permette di esporre nel modo più semplice i concetti, dato che ormai la libreria di LINQ è entrata nelle “competenze base” di qualsiasi sviluppatore C#.

Alla fine di ogni capitolo sono stati inseriti degli esercizi che il lettore è inviato a svolgere: questa è una idea interessante ed efficace che trasforma il libro in un corso pratico sulla programmazione funzionale in C#.

Per concludere, questo è l’unico libro che riesce a condensare la programmazione funzionale in esempi facili da comprendere, avvicinando molti sviluppatori che non la conoscevano o che la ritenevano troppo complessa da imparare e da gestire. Consigliato per chi vuole sviluppare applicazioni praticamente esenti da errori e in modo efficace ed efficiente.

C# 10 – The first 5 new features of the new version for Visual Studio 2022 (English version)

C# was officially released in January 2002, so in a few months’ time we will be able to celebrate the 20th birthday of this programming language. In the meantime, we already know that there will be a new version, namely the tenth. C# 10, together with Visual Studio 2022 and .NET 6, is expected around November 2021. From some official sources and the development team’s blog, it seems that there will be a lot of new features.

This can be a bit traumatising for all that you have to learn, but if you follow the news as it is published, you can find a lot of interesting news. In particular this is a selection of the 5 new features that will be in the new version of C#:

  1. Null Parameter Checking
  2. Required Properties
  3. Field Keyword
  4. Global Usings
  5. File Namespaces

1. Null Parameter Checking

The Null Reference Exception is one of the worst bugs you can have in your code. To protect against this kind of exception, you need a foolproof design of your application and a lot of checks on function parameters. This new feature should help us prevent this problem and make our code more readable and robust.

1.1 Current problem

At the moment, if you want to check that a certain parameter of your function is null, you should do something like this

public SomeFunction(int id, SomeClass newObject)
{
  if (newObject == null)
  {
    throw new ArgumentNullException("newObject");
  }
  ...
}

In this code we inject newObject of SomeClass into SomeFunction. If the object mentioned is null we should not proceed with the code. Many people will say that with proper application design this problem should not exist, but sometimes it is necessary to do so.

1.2 Characteristic of C# 10

The new version of C# aims to simplify this problem for us with: !!. All you have to do is add two exclamation marks (called “Bang bang”) after the parameter name:

public SomeFunction(int id, SomeClass newObject!!)
{
	...
}

In this example, the code will automatically check if newObject is null. The ArgumentNullException will automatically be thrown if the newObject value is null.

2. Required Properties

Weren’t constructors used more explicitly in the past? Today we don’t write heavy constructors, most of the time we use light constructors, i.e. we define property values directly.

2.1 Current problem

Since a couple of versions of C#, we can create objects using lightweight constructors like this:

var newArticle = new Article
{
	Title = "C# 10 - Top 5 new features",
	Category = ".NET",
	ReleaseDate = DateTime.Now()
}

The main problem with this approach is that sometimes we need to initialise some property and we don’t do it. For example, we could do something like this, although it doesn’t make sense to create an Article object without a title:

2.2 Characteristic of C# 10

C#10 introduces a new keyword for properties: required. This allows us to make a property mandatory when defining a class. If you try to create an object without the required property you will get an error at compile time.

public class Article
{
  public required string Title { get; init; }
  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init; }
}

3. Field Keyword

Self-implemented properties are not a new feature; in fact, they first appeared in C# 3. This means that when code is compiled the compiler creates a private, anonymous field that can only be accessed through the get and set accessors of the property.

One of the interesting features that has come with the current version of C# is an init accessor. With this accessor, immutable objects are more flexible and allow the caller to mutate members during the act of construction.

3.1 Current problem

This is all well and good, but when this approach does not suit your problem you are forced to add a field and write the usual property methods. Something like this:

public class Article
{
  private string _title;
  public string Title
  {
    get
    {
      return _title;
    }
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");

      _title = value;
    }
  }
}

3.2 Characteristic of C# 10

The new version of the C# programming language introduces another new keyword: field. The above code can now be simplified:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }
}

Basically, from C# 10 there will be no need to implement an additional field. This keyword can also be used in the init accessor:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }

  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init => field = value.Date(); }
}

4. Global Using

This is a new feature that will greatly simplify your code. As you know, every C# file starts with a list of “using” that are required for the implementation. However, sometimes this is redundant, especially if you are working with ASP.NET a lot of this code is repeated and in general is just “noise” for programmers.

4.1 Current problem

If we take an ASP.NET file as an example, the list of uses is enormous:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

4.2 Characteristic of C# 10

Another keyword that C# 10 introduces is global. By using global, you will be able to define global usings for the entire project. In general, it is recommended that you create a separate file that will contain these imports, something like usings.cs. This means that the other files in the project can be simplified as they no longer need to add all these using. C# designers refer to this as the elimination of “vertical (space) wastage”.

global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.HttpsPolicy;
global using Microsoft.AspNetCore.Identity;
global using Microsoft.AspNetCore.Identity.UI;
global using Microsoft.EntityFrameworkCore;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;

5. File Namespaces

By using the global keyword C# eliminates “vertical waste” and with file name spaces it eliminates “horizontal waste”. Basically, this feature aims to solve the indentation problem and is more than a cosmetic change: hopefully it will make the code cleaner.

5.1 Current problem

Nowadays, after the using list, the first thing you see in a C# file is the namespace definition. After that comes the definition of the class. The implementation of the class is already indented at this point. This is what we consider “horizontal waste”.

namespace Blog
{
  public class Article
  {
    ...
  }
}

5.2 Characteristic of C# 10

With this feature, you can define the file-level namespace like this:

namespace Blog;

public class Article
{
  ...
}

Conclusion

In this article, we have had the opportunity to familiarise ourselves with 5 new features that the new version of C# will bring. Some of them seem like a great improvement and it looks like they will affect the way we organise and write C# projects.

C# 10 – Le prime 5 nuove caratteristiche della nuova versione per Visual Studio 2022

C# è ufficialmente uscito nel gennaio 2002 e quindi tra qualche mese potremo festeggiare il 20° compleanno di questo linguaggio di programmazione. Nell’attesa, sappiamo già che ci sarà una nuova versione, precisamente la decima. C# 10, insieme a Visual Studio 2022 e a .NET 6, è atteso verso novembre 2021. A vedere alcune fonti ufficiali e il blog del team di sviluppo sembra che ci saranno parecchie novità.

Questo può essere un po’ traumatizzante per tutto quello che bisogna imparare, ma seguendo un po’ le notizie che via via vengono pubblicate si possono trovare parecchie notizie interessanti. In particolare questa è una selezione delle 5 nuove caratteristiche che ci saranno nella nuova versione di C#:

  1. Null Parameter Checking
  2. Required Properties
  3. Field Keyword
  4. Global Usings
  5. File Namespaces

1. Null Parameter Checking (Controllo dei parametri nulli)

La Null Reference Exception è uno dei peggiori bug che potete avere nel vostro codice. Per proteggersi da questo tipo di eccezioni, è necessaria una progettazione a prova di bomba dell’applicazione e un sacco di controlli sui parametri delle funzioni. Questa nuova caratteristica dovrebbe aiutarci a prevenire questo problema e rendere il nostro codice più leggibile e robusto.

1.1 Problema attuale

Al momento se volete controllare che un certo parametro della vostra funzione sia nullo, dovreste fare qualcosa del genere

public SomeFunction(int id, SomeClass newObject)
{
  if (newObject == null)
  {
    throw new ArgumentNullException("newObject");
  }
  ...
}

In questo codice iniettiamo newObject di SomeClass in SomeFunction. Se l’oggetto menzionato è nullo non dovremmo procedere con il codice. Molte persone diranno che con la corretta progettazione dell’applicazione questo problema non dovrebbe esistere, ma a volte è necessario farlo.

1.2 Caratteristica di C# 10

La nuova versione di C# mira a semplificarci questo problema con: !!. Tutto quello che dovete fare è aggiungere due punti esclamativi (che vengono chiamati “Bang bang“) dopo il nome del parametro:

public SomeFunction(int id, SomeClass newObject!!)
{
	...
}

In questo esempio, il codice controllerà automaticamente se newObject è nullo. La ArgumentNullException sarà automaticamente lanciata se il valore newObject è nullo.

2. Required Properties (Proprietà richieste)

I costruttori non erano usati più esplicitamente in passato? Oggi non scriviamo costruttori pesanti, il più delle volte usiamo costruttori leggeri, cioè definiamo direttamente i valori delle proprietà.

2.1 Problema attuale

Da un paio di versioni di C#, possiamo creare oggetti usando costruttori leggeri come questo:

var newArticle = new Article
{
	Title = "C# 10 - Top 5 new features",
	Category = ".NET",
	ReleaseDate = DateTime.Now()
}

Il problema principale con questo approccio è che a volte abbiamo bisogno di inizializzare qualche proprietà e non lo facciamo. Per esempio, potremmo fare qualcosa del genere, anche se non ha senso creare un oggetto Article senza un titolo:

2.2 Caratteristica di C# 10

C#10 introduce una nuova parola chiave per le proprietà: required. In questo modo, quando si definisce una classe, possiamo rendere una proprietà obbligatoria. Se provi a creare un oggetto senza la proprietà required otterrai un errore in fase di compilazione.

public class Article
{
  public required string Title { get; init; }
  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init; }
}


3. Field Keyword (Parola chiave di campo)

Le proprietà autoimplementate non sono una nuova caratteristica, infatti, sono apparse per la prima volta in C# 3. Questo significa che quando il codice viene compilato il compilatore crea un campo privato, anonimo, che può essere accessibile solo attraverso gli accessor get e set della proprietà.

Una delle caratteristiche interessanti che è arrivata con l’attuale versione di C# è un accessor init. Con questo accessor, gli oggetti immutabili sono più flessibili e permettono al chiamante di mutare i membri durante l’atto della costruzione.

3.1 Problema attuale

Tutto questo è ottimo, ma quando questo approccio non si adatta al vostro problema siete costretti ad aggiungere un campo e a scrivere i soliti metodi di proprietà. Qualcosa del genere:

public class Article
{
  private string _title;
  public string Title
  {
    get
    {
      return _title;
    }
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");

      _title = value;
    }
  }
}


3.2 Caratteristica di C# 10

La nuova versione del linguaggio di programmazione C# introduce un’altra nuova parola chiave: field. Il codice di cui sopra può ora essere semplificato:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }
}

In sostanza, da C# 10 non ci sarà bisogno di implementare un campo aggiuntivo. Questa parola chiave può anche essere usata nell’accessor init:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }

  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init => field = value.Date(); }
}


4. Global Using (Using globali)

Questa è una nuova caratteristica che semplificherà molto il codice. Come sapete, ogni file C# inizia con una lista di “using” che sono necessari per l’implementazione. Tuttavia, a volte questo è ridondante, specialmente se state lavorando con ASP.NET molto di questo codice è ripetuto e in generale è solo “rumore” per i programmatori.

4.1 Problema attuale

Se prendiamo per esempio un file ASP.NET, l’elenco degli usi è enorme:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;


4.2 Caratteristica di C# 10

Un’altra parola chiave che C# 10 introduce è global. Usando global, sarete in grado di definire using globali per l’intero progetto. In generale, si raccomanda di creare un file separato che conterrà queste importazioni, qualcosa come usings.cs. Questo significa che gli altri file del progetto possono essere semplificati poiché non hanno più bisogno di aggiungere tutti questi using. I progettisti C# si riferiscono a questo come all’eliminazione degli “sprechi (di spazio) verticali”.

global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.HttpsPolicy;
global using Microsoft.AspNetCore.Identity;
global using Microsoft.AspNetCore.Identity.UI;
global using Microsoft.EntityFrameworkCore;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;

5. File Namespaces (Spazi dei nomi dei file)

Usando la parola chiave global C# elimina lo “spreco verticale” e con gli spazi dei nomi dei file elimina lo “spreco orizzontale”. Fondamentalmente, questa caratteristica mira a risolvere il problema dell’indentazione ed è più di un cambiamento cosmetico: si spera che questo possa rendere il codice più pulito.

5.1 Problema attuale

Al giorno d’oggi, dopo la lista degli using, la prima cosa che si vede in un file C# è la definizione del namespace. Dopo di che viene la definizione della classe. L’implementazione della classe è già indentata a questo punto. Questo è ciò che consideriamo uno “spreco orizzontale”.

namespace Blog
{
  public class Article
  {
    ...
  }
}


5.2 Caratteristica C# 10

Con questa caratteristica potete definire il namespace a livello di file in questo modo:

namespace Blog;

public class Article
{
  ...
}

Conclusione

In questo articolo, abbiamo avuto la possibilità di familiarizzare con 5 nuove caratteristiche che la nuova versione di C# porterà. Alcune di esse sembrano un grande miglioramento e sembra che influenzeranno il modo in cui organizziamo e scriviamo i progetti C#.

Books and articles in English

For at least 15 years now, I have published at least 50 articles and 16 books on technical subjects: programming, databases, electronics (with Arduino), Office and so on.
So far, I have only published in Italian, but I feel the need to expand my horizons, so I am going to do an experiment: I will try to translate some of my articles from Italian into English. I will also try to translate my next posts in this blog.
I would appreciate it if you could point out any grammatical errors (or nonsense sentences) so that I can improve my translations.
Thank you!


TRADUZIONE | Trad&Co | Elisabetta Minetto

"Come diventare esperti", ce lo spiega bene Paolo Aliverti

Bravo Paolo Aliverti, è il mio stesso sistema! … Battere il chiodo finché è caldo, a costo di alzarmi alle 4 di mattina (come regolarmente faccio da anni).

https://www.youtube.com/watch?v=zM9lYN4CP0Q

image

Si riparte dopo la pausa!

Le mie brevi ferie al mare (una settimana) stanno per volgere al termine e domani tornerò nella fresca Belluno per una lenta ripresa della vita normale.

È stata una settimana di relax ma anche di riflessioni su cosa veramente voglio portare avanti tra tutte le idee e gli esperimenti che ho avviato, tra video, libri, articoli, podcast e così via.

Penso che nei prossimi mesi mi concentrerò soprattutto su due filoni: libri e video.

Per quanto riguarda i libri, considerato che di materiale c’è n’è tanto, sto pensando di scrivere e pubblicare una trilogia su C#: un libro base su C#, uno su argomenti avanzati e uno su “dati e algoritmi”.

L’altro filone sui video viene fuori dalla sperimentazione del mio canale YouTube. Visite ne ho parecchie, ma YouTube non monetizza nulla se non si raggiungono volumi esagerati di visualizzazioni. Però è una ottima prova per passare al livello successivo. Faccio spesso questi esperimenti, provo una cosa nuova, la alimento, la faccio maturare e crescere e vedo come va. Se va bene, bisogna strutturarla. Ecco perché i video diventeranno veri corsi su Udemy. Ovviamente dovrò rifarli con maggiore criterio per renderli fruibili nel modo adeguato: tempi giusti senza sprechi, testi precisi, esempi calzanti. Forse farò anche degli esperimenti in inglese, chissà… Ma è meglio non mettere troppa carne al fuoco: poche cose ma fatte bene.

Buone vacanze a chi non è ancora andato (molti in Italia scelgono agosto) e buona ripresa a chi è già tornato.

Sempre avanti, chi si ferma è perduto! 🤣

Punto della situazione pre-ferie

Era parecchio tempo che non mi dedicavo a scrivere libri e articoli, a sperimentare, a scrivere codice, a fare progetti sul futuro. Poi non so cosa sia successo, ma nell’ultima parte del 2020 (sarà stata la depressione da Covid?), mi sono lanciato in una continua corsa che sta continuando fino ad oggi. Tra qualche giorno andrò in ferie e quindi vorrei fare un po’ il punto della situazione delle cose fatte fino a qui e di quelle che continuerò dopo le ferie.
Innanzi tutto i libri… da dicembre a oggi ne ho pubblicati tre, tutti rigorosamente in “self publishing” e pubblicati sia sulla piattaforma Youcanprint.it (che mi consente di averli su tutti gli store online e nelle librerie fisiche) sia su Gumroad.com in formato PDF (
https://gumroad.com/mdeghetto):

– “Corso di Basi di Dati I”
– “Visual Basic 2019 – Guida alla programmazione”
– “Word 2019 – Guida per iniziare”

Su Gumroad.com ho pubblicato anche 4 miei articoli:

– 001 Creare controlli utente con Visual Basic 2019
– 002 Programmazione concorrente in F#
– 003 Programmiamo Arduino con Visual Studio
– 004 Arduino musicale con Visual Studio

Sono tutte iniziative a pagamento, anche se a costi accessibili, perché sto cercando di trovare un “piano B” alla mia vita lavorativa che attualmente non mi sta dando assolutamente alcuna soddisfazione dal punto di vista economico (come a molte altre persone senza dubbio, ma non credo che il desiderio di migliorare sia deprecabile).
Ho poi un altro progetto che mi frulla in mente da un po’ e sto ponendo la “prima pietra angolare” di questa costruzione: una libreria di classi per .NET Standard e .NET Core, con funzioni di vario genere. Nella mia idea sarà una libreria distribuita gratuitamente via NuGet, ma il manuale di istruzioni sarà un libro a pagamento (sempre su Gumroad.com). Questa scelta è per facilitarmi la gestione fiscale, dato che nella mia attuale situazione è più semplice dichiarare i diritti d’autore piuttosto che avviare una vera e propria vendita di prodotto (che richiederebbe una partita IVA e molto altro). Un po’ come alcune applicazioni gestionali/contabili che vengono distribuite gratuitamente e/o in open source, ma che richiedono una consulenza a pagamento (non è il mio caso, ma è una similitudine).
Altri progetti? Certo che sì:

– i video del mio canale YouTube (https://www.youtube.com/c/MarioDeGhetto)
– i podcast del mio canale (
https://www.spreaker.com/user/mdeghetto)
– i blog post di questo blog e del mio personale (
https://deghetto.wordpress.com)
– continuare lo studio e applicare le conoscenze a progetti di elettronica con Arduino e Raspberry Pi
– scrivere altri libri su C#, Visual Studio 2022, F#, Algoritmi e chi più ne ha più ne metta
– stessa cosa per gli articoli…

Insomma un apoteosi di materiale per il quale mi servirebbero 72 ore al giorno!
Per il momento mi accontento e mi accingo ad andare a fare le meritate ferie, poi si vedrà.
Un saluto a tutti e buone ferie a chi deve ancora andarci.

Articolo "Arduino musicale con Visual Studio" (VB e C#)

Ultimo mio articolo pubblicato oggi: “Arduino musicale con Visual Studio”, applicazioni in Visual Basic e C# per far suonare melodie ad Arduino:

https://mdeghetto.gumroad.com/l/Art004

copertina


Nuovo progetto: libreria di classi. NET

Mi lancio in un nuovo progetto: una libreria di classi per applicazioni .NET Standard e .NET Core.

La distribuzione sarà basata su una .DLL compilata.

La distribuirò gratuitamente, man mano che andrò avanti con lo sviluppo, ma il manuale d’uso sarà a pagamento sulla piattaforma gumroad.com. Dato che il prezzo del manuale crescerà con la crescita della libreria, chi acquista il manuale avrà anche un anno di aggiornamenti del manuale senza ulteriori addebiti e con notifica nella casella mail utilizzata in fase di acquisto.

Aggiornamenti su questo progetto molto presto… say tuned!

😊

Visual Studio 2022 e C# – Il mio prossimo progetto editoriale

Dopo aver pubblicato il mio libro “Visual Basic 2019 – Guida alla programmazione” (ved. http://books.bell1.net) è tempo di dedicarmi a C# e in particolare alla prossima versione che sarà distribuita con Visual Studio 2022, presumibilmente verso fine 2021 o all’inizio del 2022.

Non so se sto delirando Surprised smile ma c’è talmente tanto materiale da sviscerare che ho quasi in mente l’idea di farne più libri, non uno solo, anche perché ho un limite di circa 700 pagine con Youcanprint.it e sono troppo poche per quello che ci voglio mettere dentro: tutte le informazioni “base”, argomenti avanzati, la gestione di fonti di dati e le strutture/algoritmi (tuple, record, stack, queue ecc.). Ho idea che serviranno almeno due o tre libri per tutto, quindi ci vorrà un po’ di tempo.

Allora ho pensato di pubblicare qui qualche “pezzo”, qualche “tips & tricks”, tratti dai testi che man mano termino di scrivere. Non sarà ovviamente una pubblicazione completa: per averla completa dovrete acquistare i libri, ma saranno comunque spunti su cui studiare e approfondire.

Dato che ho appena terminato il 1° capitolo introduttivo su Visual Studio 2022, ecco qui qualche assaggio.

========== ========== ========== ========== ========== ========== ========== ========== ========== ==========

Gli ambienti di sviluppo integrati (IDE) sono una categoria molto particolare di programmi applicativi: sono programmi che servono a costruire altri programmi. Tra i tanti ambienti di sviluppo esistenti, uno ha avuto forse più successo di tutti: Visual Studio, prodotto da Microsoft e ormai giunto alla versione 2022. Internamente è classificato come versione “17”.

NOTA – L’acronimo IDE significa Integrated Development Environment, cioè ambiente di sviluppo integrato.

———-

Ciclo di vita di qualsiasi tipo di applicazione:

· progettazione e creazione di prototipi;

· creazione dell’interfaccia utente, anche con i designer di interfacce grafiche e con gli emulatori di dispositivi mobili;

· scrittura del codice con l’editor di codice;

· gestione e interazione con le fonti di dati: progettazione, modellazione, visione/modifica;

· gestione della documentazione;

· test (per mezzo degli unit test);

· debug, con molti strumenti di analisi del codice e del programma in esecuzione;

· creazione del pacchetto di installazione;

· rilascio e distribuzione dell’applicazione.

———-

Nelle versioni più recenti la parità delle funzionalità dei due linguaggi si è persa, dato che mentre C# ha continuato a essere esteso con nuove funzionalità (spesso prese anche dal paradigma funzionale adottato dal linguaggio F#), Visual Basic è rimasto al palo, salvo pochi aggiustamenti che sono serviti per correggere alcuni errori. La motivazione data dal team di sviluppo sul mancato sviluppo di Visual Basic è la necessità di dare stabilità al linguaggio.

NOTA – La nostra opinione è che portare ancora avanti il linguaggio Visual Basic è ormai economicamente insostenibile per Microsoft, dato che commercialmente si tratta di un “doppione” di C# (facevano le stesse cose). Ciò non toglie che Visual Basic resterà nel mondo reale ancora per decenni come è successo per VB 6.0, dato che esistono ormai decine o centinaia di migliaia di applicazioni scritte in Visual Basic. La conversione a C# prima o poi avverrà, ma molto gradualmente e solo quando sarà necessario estendere il campo delle applicazioni ad altre piattaforme o a funzionalità che non sono disponibili in Visual Basic.

———-

Alcuni linguaggi, come C#, aderiscono a più di un paradigma di programmazione. Se prendiamo qualsiasi programma C#, scopriremo che aderisce all’importantissimo paradigma della programmazione orientata agli oggetti, perché in C# “tutto” è un oggetto, perfino l’utente. In C# troviamo anche il paradigma della programmazione orientata agli eventi, in particolare per la definizione dei comportamenti delle interfacce grafiche, e possiamo utilizzare anche le tecniche della programmazione strutturata. Naturalmente possiamo facilmente individuare anche i paradigmi della programmazione imperativa (le istruzioni sono “comandi”), della programmazione dichiarativa (per esempio nell’ambito delle interfacce grafiche definite nelle applicazioni WPF, con il codice XAML) e della programmazione funzionale (istruzioni della libreria LINQ e altre tecniche funzionali spesso derivate da F#).

———-

Visto che la programmazione orientata agli oggetti, spesso chiamata con l’acronimo OOP che significa Object Oriented Programming, è così importante in C# e negli altri linguaggi .NET, iniziamo ad approfondire i tre concetti fondamentali che costituiscono i pilastri su cui si basa questo paradigma: ereditarietà, incapsulamento e polimorfismo.

È programmazione orientata agli oggetti vera e propria se sono applicati tutti e tre questi concetti, altrimenti si tratta tutt’al più di programmazione basata sugli oggetti.

———-

Per denominare in modo sintetico le classi derivate, in tutto il loro percorso, si può usare una notazione con il punto (.), come nel seguente esempio:

RegnoAnimale.Cordati.Mammiferi.Felini.Gatto

NOTA – Abbiamo introdotto la notazione del punto (.). Il punto tra due elementi (due classi o una classe e il suo metodo o attributo) significa semplicemente che l’elemento posto a destra del punto “appartiene” all’elemento posto a sinistra.

La stessa cosa si può fare quando ci si deve riferire a un metodo di una classe. Per esempio, per indicare il colore di un gatto possiamo riferirci alla corrispondente proprietà:

Gatto.Colore = “Nero”

———-

L’incapsulamento rende una classe molto simile a una “scatola nera”: l’interazione con la scatola nera (classe) è limitata ai metodi che possono essere richiamati. Non è possibile in alcun modo modificare lo stato interno della scatola nera se non in modo fortemente controllato attraverso i metodi.

In questo scenario c’è un vantaggio collaterale: se dall’esterno non è possibile vedere alcuna modifica dei “punti di accesso” (metodi) alla scatola nera, possiamo modificare anche pesantemente il codice interno alla classe senza dover cambiare anche di una sola riga di codice in tutto il resto dell’applicazione. Tecnicamente, in questo caso si parla di alto grado di isolamento tra l’interno e l’esterno della classe.

———-

Per polimorfismo si intende la possibilità di interagire con due o più classi, dotate di un insieme di metodi e di proprietà comuni, senza dover identificare esattamente il tipo di oggetto con il quale si sta lavorando.

———-

Esempio CS_01_02


image

———-

Esempio CS_01_03


image

———-

Volete fare qualcosa di ancora più veloce, cioè provare una istruzione o più istruzioni “al volo”, senza creare appositamente un programma? Allora dovete provare la finestra “C# Interactive”: cliccate sul menu View > Other Windows > C# Interactive.

Si aprirà una finestra come quella che potete vedere nella Figura 1.2:

Figura 1.2 – La finestra C# Interactive.

clip_image002

Inizio a scrivere un libro su C# 10.0 (per Visual Studio 2022)

In questi giorni sto riordinando il materiale per scrivere un libro su C# 10.0 (per Visual Studio 2022) e quindi ho iniziato a scrivere il 1° capitolo.

Immancabile il confronto con Visual Basic che ormai è diventato impietoso, dato che Microsoft ha deciso di non sviluppare più questo linguaggio.

Ecco un brano che tratta proprio sul confronto tra i due linguaggi e l’epilogo di Visual Basic:


La discussione su quale linguaggio sia il migliore è tradizionalmente ancora viva tra gli sviluppatori C# e quelli Visual Basic, senza contare chi sviluppa in Python o in C++. Fino alla versione 2010 la scelta tra i linguaggi VB e C# era dettata quasi unicamente dalle preferenze personali e dall’ampiezza delle conoscenze dello sviluppatore: infatti i due linguaggi avevano le stesse potenzialità, perché entrambi basati sulla programmazione orientata agli oggetti (OOP), mentre ovviamente differiscono nella sintassi, cioè la “grammatica” e la grafia con cui vengono scritte le istruzioni.

Nelle versioni più recenti la parità delle funzionalità dei due linguaggi si è persa, dato che mentre C# ha continuato a essere esteso con nuove funzionalità (spesso prese anche dal paradigma funzionale adottato dal linguaggio F#), Visual Basic è rimasto al palo, salvo pochi aggiustamenti che sono serviti per correggere alcuni errori. La motivazione data dal team di sviluppo sul mancato sviluppo di Visual Basic è la necessità di dare stabilità al linguaggio.

NOTA – La nostra opinione è che portare ancora avanti il linguaggio Visual Basic è ormai economicamente insostenibile per Microsoft, dato che commercialmente si tratta di un “doppione” di C# (facevano le stesse cose). Ciò non toglie che Visual Basic resterà nel mondo reale ancora per decenni come è successo per VB 6.0, dato che esistono ormai decine o centinaia di migliaia di applicazioni scritte in Visual Basic. La conversione a C# prima o poi avverrà, ma molto gradualmente e solo quando sarà necessario estendere il campo delle applicazioni ad altre piattaforme o a funzionalità che non sono disponibili in Visual Basic.


Probabilmente qui finisce un’era. Peccato. Sad smile

Visual Studio 2022 "Preview 1" disponibile al download!

Finalmente è arrivato Visual Studio 2022: la “Preview 1” è disponibile per il download gratuito QUI.

Attenzione al fatto che si tratta di una versione preliminare e quindi:

  • possono esserci funzionalità incomplete
  • possono manifestarsi errori in qualsiasi parte del prodotto
  • NON dispone di licenza commerciale e quindi si possono solo fare test e prototipi, non si possono distribuire prodotti finiti realizzati con questa versione

image

IL LINGUAGGIO F#: LA NUOVA/VECCHIA FRONTIERA DELLO SVILUPPO DI SOFTWARE

Tra le mie nomine a Microsoft MVP che ho avuto tra il 2008 e il 2019 c’è stata anche quella sul linguaggio F#, durata un solo anno, perché poi Microsoft ha riunito tutte le nomine relative ai linguaggi di programmazione nell’unica nomina dal titolo “Visual Studio and Development Technologies”.

Pur essendo da decenni uno sviluppatore Visual Basic e avendo programmato anche in vari altri linguaggi (tutte le versioni Basic dal Commodore VIC-20, al Gw-Basic, al Visual Basic 1.0 per MS-DOS e quasi tutte le versioni Visual Basic, ma anche C# e JAVA, oltre che il linguaggio Clipper, dBIII e dBIV), devo dire che fin da subito, quando questo linguaggio è stato rilasciato da Microsoft, il linguaggio F# mi ha colpito e impressionato più di tutti. Mi ha colpito la sua essenzialità e la sua potenza immersa in una concisione dei costrutti veramente incredibile.

F# For Dynamics CE - Why and How | Formus Professional Software

Quello che mi ha colpito più di tutto è il fatto che l’obiettivo principale che caratterizza questo linguaggio è il miglioramento della qualità del codice: questo è ottenuto attraverso l’immutabilità delle variabili, l’eliminazione del concetto di Null, la possibilità di nidificare le varie parti di codice, cioè le funzioni, una dentro l’altra, come in una espressione matematica.

In qualche modo questo mi ricorda molto il linguaggio SQL, soprattutto tenendo presente i costrutti dell’algebra relazionale: proiezione, selezione, ridenominazione e prodotto cartesiano. Quattro operazioni che possono essere inglobate una nell’altra fino ad ottenere il risultato desiderato.

La stessa cosa per quanto riguarda LINQ: la libreria introdotta con .NET Framework 3.5 e in Visual Studio 2005. Anche in questo caso abbiamo una struttura del linguaggio che ha un approccio molto matematico.

Be’, ho citato le funzioni nidificate una nell’altra e in effetti F# è un “linguaggio funzionale”, cioè basato su funzioni che possono essere concatenate una all’altra fino a raggiungere l’obiettivo prefissato dal nostro programma.

Ora, forse non è chiaro perché nel titolo ho scritto che F# costituisce la “nuova/vecchia frontiera” dello sviluppo del software. In effetti, il paradigma della programmazione funzionale non è una novità di questi due ultimi decenni, con l’uscita di F# dai laboratori di Microsoft Research: infatti è un paradigma che esiste da molti più decenni e in qualche modo è rimasto un po’ confinato nell’ambito accademico o altamente specialistico, con linguaggi come Haskel (1978), Eiffel (1985), ma anche Erlang (utilizzato da Whatsup).

I linguaggi funzionali hanno così avuto un po’ la fama di linguaggi adatti agli scienziati o a studiosi chiusi nelle loro Università. In alcuni casi sono stati utilizzati per ambiti dove era necessaria una altissima velocità e precisione come nelle applicazioni bancarie.

Oggi abbiamo questa nuova frontiera data dalla ri-scoperta dei linguaggi funzionali, dato che Microsoft per prima, ma anche molti sviluppatori poi, si sono resi conto che questo linguaggio permette di realizzare quello che per Deming è l’obiettivo principe di qualsiasi attività produttiva: il miglioramento continuo della qualità.

Il fatto che non esistano i valori nulli, che le variabili non abbiano dei cambiamenti occulti (magari per qualche thread parallelo che li modifica) e che i costrutti sono di radice matematica e quindi deterministici, rendono questo linguaggio l’ideale per produrre codice praticamente esente da errori e dai cosiddetti “effetti collaterali”.

Il vantaggio che F# fornisce rispetto ai suoi colleghi funzionali più anziani, però, è dato dal fatto che è perfettamente integrato con .NET Framework e quindi nello stesso programma F# possiamo integrare parti di codice funzionale, parti di codice orientato agli oggetti e parte di codice secondo il paradigma imperativo. Ovviamente tutto deve essere ben calibrato in modo da non introdurre quei piccoli mostri che sono gli effetti collaterali di un codice non deterministico.

Un progetto scritto in F# può essere aggiunto senza problemi a una Soluzione di Visual Studio, insieme a progetti scritti in C# e in Visual Basic. Inoltre lavora bene anche con la piattaforma Azure. Meglio di così: cosa volete di più?

Dopo questo articolo introduttivo, pian piano porterò altre informazioni su F#, così vediamo se riuscirò a stimolare il vostro interesse.