Ecco un semplice spezzone di codice C#, utile a mostrare come vengono gestiti i tipi in un linguaggio fortemente tipizzato:
private int add(int a, int b) => a + b;
private void test()
{
int x = 3;
string y = "7";
int result = add(x, y);
Console.WriteLine($"Result of addition: {result}");
}
Alla terza riga della funzione test viene segnalato un errore:
Argument 2: cannot convert from 'string' to 'int'
Dobbiamo esplicitamente eseguire la conversione di tipo:
private void test2()
{
int x = 3;
string y = "7";
int result = add(x, int.Parse(y));
Console.WriteLine($"Result of addition: {result}");
}
Questo codice funziona, ma immaginiamo che y contenga una stringa scritta dall'utente; può essere generata un'eccezione nel caso essa contenga un valore che non è traducibile in un numero intero.
In tal caso, dobbiamo prevedere di gestire l'eccezione:
private void test3()
{
int x = 3;
string y = getValueFromUser();
try
{
int result = add(x, int.Parse(y));
Console.WriteLine($"Result of addition: {result}");
}
catch (FormatException ex)
{
Console.WriteLine($"Error converting '{y}': {ex.Message}");
}
}
Oppure, in alternativa all'utilizzo delle eccezioni:
private void test4()
{
int x = 3;
string s = getValueFromUser();
if (int.TryParse(s, out int y))
{
int result = add(x, y);
Console.WriteLine($"Result of addition: {result}");
}
else
{
Console.WriteLine($"Error converting '{s}' to an integer.");
}
}
Esempio analogo, in Dart; si noti che la funzione tryParse, diversamente dalla sua analoga C#, restituisce un intero nullabile, rendendo il codice più leggibile:
int add(int a, int b) => a + b;
void _test4() {
int x = 3;
String s = getValueFromUser();
int? y = int.tryParse(s);
if (y != null) {
int result = add(x, y);
print('Result of addition: $result');
} else {
print("Error converting '$s' to an integer.");
}
}
Giorgio Barchiesi
Albo degli Ingegneri Sez. A, N. 4027 della Prov. di Trento
P.IVA 02370260222, C.F. BRC GRG 58L26 C794R
Copyright © 2015-2024 Giorgio Barchiesi - Tutti i diritti riservati