Linguaggi di programmazione

Type safety (strong typing)

C#

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.");
    }
}


Dart

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