Scegliere il tipo di dati appropriato

Completato

È stata illustrata la differenza tra tipi valore e tipi riferimento, nonché tra tipi a virgola mobile e integrali.

Si supponga di avere il compito di creare una nuova applicazione per recuperare, modificare e archiviare tipi di dati diversi. Quali tipi di dati si usano?

In alcuni casi, si tratta di una scelta semplice. Quando, ad esempio, è necessario lavorare con il testo, si sceglie di usare il tipo di dati string, a meno che non sia necessario eseguire una quantità significativa di operazioni di concatenazione.

Ma come funziona con i dati numerici? Esistono 11 opzioni diverse. Come scegliere il tipo di dati appropriato?

Scegliere il tipo di dati appropriato

Con così tanti tipi di dati tra cui scegliere, quali sono i criteri da seguire per scegliere il tipo di dati appropriato per una determinata situazione?

Quando si valutano le opzioni, è necessario tenere presenti alcune importanti considerazioni. Anche se spesso non esiste una sola risposta corretta, alcune risposte sono più corrette di altre.

Scegliere il tipo di dati che soddisfa i requisiti dell'intervallo di valori limite dell'applicazione

La scelta di un tipo di dati consente di impostare i limiti per le dimensioni dei dati che è possibile archiviare in una determinata variabile. Se ad esempio si sa che una determinata variabile deve archiviare solo un numero compreso tra 1 e 10.000 per non superare i limiti previsti, probabilmente si eviteranno byte e sbyte che hanno intervalli troppo bassi.

Probabilmente non saranno adatti nemmeno int, long, uint e ulong, perché possono archiviare più dati del necessario. Analogamente, è probabile che si ignorino float, double e decimal se non sono necessari valori frazionari. È possibile restringere il campo a short e ushort, di cui entrambi possono essere validi. Se si è certi che un valore negativo non avrebbe significato nell'applicazione, è possibile scegliere ushort (numero intero positivo senza segno, da 0 a 65.535). A questo punto, qualsiasi valore assegnato a una variabile di tipo ushort che non rientra nel limite compreso tra 0 e 65535 genera un'eccezione, consentendo in tal modo di imporre un determinato livello di verifica dell'integrità nell'applicazione.

Iniziare con la scelta del tipo di dati per adattarlo ai dati (non per ottimizzare le prestazioni)

Si potrebbe essere tentati di scegliere il tipo di dati che usa il minor numero di bit per archiviare i dati pensando di migliorare in tal modo le prestazioni dell'applicazione. Tuttavia, uno dei migliori consigli sulle prestazioni dell'applicazione (ovvero la velocità di esecuzione dell'applicazione) è quello di non "ottimizzare troppo presto". È meglio resistere alla tentazione di ipotizzare quali parti del codice, inclusa la selezione dei tipi di dati, possono influire sulle prestazioni dell'applicazione.

Molti presuppongono che, poiché un determinato tipo di dati archivia meno informazioni, deve usare meno capacità di elaborazione e meno memoria del computer rispetto a un tipo di dati che archivia più informazioni. È invece consigliabile scegliere la soluzione adatta ai propri dati e, in un secondo momento, misurare in modo empirico le prestazioni dell'applicazione usando un software speciale che fornisce informazioni effettive sulle parti dell'applicazione che influiscono negativamente sulle prestazioni.

Scegliere i tipi di dati in base ai tipi di dati di input e output delle funzioni della libreria usate

Si supponga di voler usare un intervallo di anni tra due date. Poiché si tratta di un'applicazione aziendale, si potrebbe stabilire che è necessario un intervallo compreso solo tra 1960 e 2200 circa. Si potrebbe quindi decidere di usare byte perché può rappresentare numeri compresi tra 0 e 255.

Quando tuttavia si esaminano i metodi predefiniti nelle classi System.TimeSpan e System.DateTime, ci si rende conto che accettano principalmente valori di tipo double e int. Se si sceglie sbyte, verrà eseguito continuamente il cast tra sbyte e double o int. In questo caso, può essere più logico scegliere int se non è necessaria una precisione nell'ordine delle frazioni di secondo e double se invece lo è.

Scegliere i tipi di dati in base all'impatto su altri sistemi

In alcuni casi, è necessario considerare come verranno utilizzate le informazioni dalle altre applicazioni o dagli altri sistemi, ad esempio un database. Il sistema di tipi di SQL Server, ad esempio, è diverso dal sistema di tipi di C#. Di conseguenza, è necessario eseguire alcune operazioni di mapping tra i due sistemi per poter salvare i dati in tale database.

Se lo scopo dell'applicazione è interfacciarsi con un database, è probabile che sia necessario considerare come vengono archiviati i dati e la quantità di dati archiviati. La scelta di un tipo di dati di dimensioni maggiori potrebbe influire sull'importo (e sul costo) dell'archiviazione fisica necessaria per archiviare tutti i dati generati dall'applicazione.

In caso di dubbi, preferire i tipi di dati di base

Anche se sono state fatte diverse riflessioni, per semplicità all'inizio è opportuno preferire un subset di tipi di dati di base, tra cui:

  • int per la maggior parte dei numeri interi
  • decimal per i numeri che rappresentano importi in denaro
  • bool per i valori true o false
  • string per un valore alfanumerico

Scegliere tipi complessi specializzati per situazioni particolari

Non reinventare i tipi di dati se uno o più tipi di dati esistono già per uno scopo specifico. Gli esempi seguenti identificano dove può essere utile uno specifico tipo di dati .NET:

  • byte: per lavorare con dati codificati provenienti da altri sistemi informatici o che usano set di caratteri diversi.
  • double: per l'uso in ambito geometrico o scientifico. double viene usato di frequente quando si creano giochi basati sul movimento.
  • System.DateTime per un valore di data e ora specifico.
  • System.TimeSpan per un intervallo di anni/mesi/giorni/ore/minuti/secondi/millisecondi.

Riepilogo

Quando si scelgono i tipi di dati per il codice, è necessario tenere presenti alcune considerazioni e spesso più opzioni. Considerare le scelte e, a meno che non si abbia un buon motivo, provare ad attenersi ai tipi di base come int, decimal, string e bool.