Choisir le type de données approprié
Vous avez entendu parler de la différence entre les types valeur et les types référence, ainsi que les types intégraux et à virgule flottante.
Supposons que votre travail consiste à générer une nouvelle application qui extrait, manipule et stocke différents types de données. Quels types de données utilisez-vous ?
Dans certains cas, le choix est simple. Par exemple, si vous avez besoin de manipuler du texte, vous utilisez par défaut le type de données string, sauf si vous devez effectuer une quantité significative de concaténation.
Mais qu’en est-il si vous utilisez des données numériques ? Vous avez le choix entre 11 options différentes. Comment allez-vous choisir le type de données approprié ?
Choisir le type de données approprié
Avec un tel choix de types de données, quels sont les critères à utiliser pour choisir le bon dans une situation particulière ?
Pour évaluer vos options, vous devez tenir compte de plusieurs considérations importantes. Souvent, il n’existe pas une seule réponse correcte, mais certaines réponses sont quand même plus correctes que d’autres.
Choisir le type de données qui répond aux exigences de plage des valeurs limites de votre application
Le choix d’un type de données peut permettre de définir les limites de la taille des données que vous pouvez stocker dans cette variable particulière. Par exemple, si vous savez qu’une variable particulière doit uniquement stocker un nombre compris entre 1 et 10 000 pour rester dans les limites prévues, vous éviterez probablement d’utiliser byte ou sbyte, car leurs plages sont trop petites.
De plus, vous n’allez probablement pas avoir besoin d’utiliser int, long, uint ou ulong, car ces types peuvent stocker une quantité de données supérieure à vos besoins. De même, vous allez ignorer float, double et decimal si vous n’avez pas besoin de valeurs fractionnaires. Vous pouvez vous limiter à short et ushort, deux options viables compte tenu des circonstances. Si vous avez la certitude qu’une valeur négative n’a pas de sens dans votre application, vous pouvez choisir ushort (entier positif non signé, compris entre 0 et 65 535). Maintenant, toute valeur affectée à une variable de type ushort en dehors de la limite comprise entre 0 et 65 535 lève une exception, ce qui vous permet de mettre subtilement en place un contrôle d’intégrité dans votre application.
Commencer par choisir le type de données adapté aux données (sans vouloir optimiser les performances)
Vous pouvez être tenté de choisir le type de données qui utilise le moins de bits pour stocker les données, en pensant que cela va améliorer les performances de votre application. Toutefois, un des meilleurs conseils liés aux performances de l’application (autrement dit, à la vitesse d’exécution de votre application) est de ne pas « optimiser trop tôt ». Vous devez résister à la tentation de spéculer sur les composants de votre code, notamment lors de la sélection des types de données, qui peuvent avoir un impact sur les performances de votre application.
Nombreux sont ceux qui pensent que, puisqu’un type de données stocke moins d’informations, il utilise moins le processeur et la mémoire de l’ordinateur qu’un type de données qui en stocke davantage. Préférez plutôt choisir la solution la mieux adaptée à vos données. Vous pourrez mesurer plus tard de manière empirique les performances de votre application à l’aide d’un logiciel spécial fournissant des insights factuels sur les composants de votre application qui exercent un impact négatif sur les performances.
Choisir les types de données en fonction des types de données d’entrée et de sortie des fonctions de bibliothèque utilisées
Supposons que vous voulez utiliser une plage de plusieurs années entre deux dates. Comme il s’agit d’une application métier, vous pouvez déterminer que vous avez besoin d’une plage allant de 1960 à 2200 uniquement. Vous pouvez envisager d’utiliser byte, car ce type peut représenter des nombres compris entre 0 et 255.
En revanche, quand vous examinez les méthodes intégrées sur les classes System.TimeSpan et System.DateTime, vous vous rendez compte qu’elles acceptent en grande partie des valeurs de type double et int. Si vous choisissez sbyte, vous allez constamment caster et recaster entre byte et double ou int. Dans ce cas, il peut être plus judicieux de choisir int, si vous n’avez pas besoin d’une précision inférieure à la seconde, et double si vous en avez besoin.
Choisir les types de données en fonction de l’impact sur d’autres systèmes
Parfois, vous devez tenir compte de la façon dont les informations sont consommées par d’autres applications ou d’autres systèmes comme une base de données. Par exemple, le système de type SQL Server est différent du système de type C#. Ainsi, un mappage entre les deux doit se produire pour que vous puissiez ensuite enregistrer des données dans cette base de données.
Si votre application est vouée à servir d’interface pour une base de données, vous devez probablement prendre en compte la façon dont les données sont stockées et la quantité de données stockées. Le choix d’un plus grand type de données peut avoir un impact sur la quantité (et le coût) du stockage physique requis pour stocker toutes les données générées par votre application.
Dans le doute, s’en tenir aux principes de base
Fort de ces multiples considérations, pour des raisons de simplicité, commencez préférablement avec un sous-ensemble des types de données de base, à savoir :
-
intpour la plupart des nombres entiers -
decimalpour les nombres représentant de l’argent -
boolpour les valeurs true ou false -
stringpour des valeurs alphanumériques
Choisir des types complexes de spécialité pour les situations spéciales
Ne réinventez pas les types de données si un ou plusieurs types de données existent déjà pour un usage donné. Les exemples suivants identifient des cas où des types de données .NET spécifiques peuvent être utiles :
-
byte: utilisation de données chiffrées provenant d’autres systèmes informatiques ou utilisant des jeux de caractères différents. -
double: usages géométriques ou scientifiques.doubleest souvent utilisé pour créer des jeux impliquant des mouvements. -
System.DateTimepour une valeur de date et heure spécifique. -
System.TimeSpanpour une plage en années/mois/jours/heures/minutes/secondes/millisecondes.
Récapitulatif
Vous devez prendre en compte certains points pour choisir les types de données pour votre code, et souvent plusieurs options sont possibles. Réfléchissez à vos choix et, à moins que vous n’ayez une bonne raison, essayez de vous en tenir aux types de base comme int, decimal, string et bool.