Variable

Classification des types valeur et des types référence

Types prédéfinis natifs

CatégorieTypes inclus
Types valeur (numériques basiques / booléens / caractères)Entiers signés : sbyte, short, int, long
Entiers non signés : byte, ushort, uint, ulong
Flottants / haute précision : float, double, decimal
Booléen : bool
Caractère : char
Types référence (références natives)object (classe de base de tous les types), string, dynamic

Types définis par l’utilisateur

CatégorieTypes
Types valeurstruct (structure), enum (énumération)
Types référenceclass, interface, delegate, array (tableau)

Comme vu au cours précédent, les données des types référence sont systématiquement stockées sur le tas. En revanche, les données des types valeur peuvent se trouver soit sur le tas, soit sur la pile.

La partie référence d’un type référence peut être stockée sur le tas ou sur la pile.

L’emplacement (tas ou pile) d’une variable de type valeur ou de la référence d’un type référence dépend du fait qu’il s’agit d’un membre d’un type ou d’une variable locale au sein d’une fonction.


Quatre catégories de variables

Type de variableDéfinition et rôle
Variable locale Local variableDonnées temporaires au sein d’une méthode, pas membre d’un type ;
Stockée sur la pile
Pas d’initialisation automatique
Champ FieldDonnée rattachée à une classe / structure, membre du type ;
Les champs de classe résident sur le tas
Les champs de structure suivent l’emplacement de la structure ;
Initialisation automatique
Paramètre ParameterVariable temporaire pour les arguments de méthode, pas membre d’un type ;
Stocké sur la pile
Pas d’initialisation automatique
Élément de tableau Array elementDonnée individuelle dans un tableau ;
Tous stockés sur le tas
Initialisation automatique

L’initialisation automatique signifie que le compilateur attribue une valeur par défaut à la variable même si le développeur ne lui donne pas de valeur initiale.

Résumé simplifié

Type de variableEmplacement mémoireInitialisation automatique
Variable localePile / Pile + TasNon
Champ de classeTasOui
Champ de structurePile / TasOui
Paramètre de méthodePileNon
Élément de tableauTasOui

Déclaration de variable

Syntaxe : Type NomVariable;

int var2;

Cette instruction déclare une variable et réalise deux actions principales :

  1. Indiquer au compilateur que var2 est une variable de type int portant le nom var2.
  2. Le compilateur réserve une zone mémoire. L’emplacement (tas ou pile) dépend du contexte : variable locale, paramètre, champ, etc.

Initialiseur de variable (Initializer)

Syntaxe : Type NomVariable = ValeurInitiale;

Exemple : int var2 = 17;

L’initialiseur est un mécanisme du compilateur qui facilite l’initialisation des variables. Certaines variables doivent être initialisées explicitement dans le code par le développeur, d’autres peuvent être traitées automatiquement par l’initialiseur.

Une variable locale non initialisée possède une valeur indéfinie ; cela provoque une erreur de compilation et empêche toute utilisation directe

Les variables à initialisation automatique comme les champs et les éléments de tableau reçoivent une valeur par défaut : 0 pour les types numériques, null pour les types référence.

Prenons cet exemple :

class Program
{
    static void Main(string[] args)
    {
        int times = 100;
        Person person = new Person();
    }
}


class Person
{
    public int age;
}   
Langage du code : JavaScript (javascript)

Cet exemple simple déclare dans la fonction Main une variable de type valeur times et une variable de type référence person. Le type référence contient un champ age.

Aucune valeur initiale n’est attribuée à age, tandis que nous donnons manuellement une valeur à times.

Ce code se compile sans erreur.

Si nous supprimons la valeur initiale 100 de times et réécrivons le code ainsi :

Un soulignement ondulé rouge apparaît immédiatement et la compilation échoue.

Tenter une compilation forcée affichera des messages d’erreur

La fenêtre liste des erreurs détaille le problème

Attention : l’erreur n’apparaît que si la variable times est utilisée dans le code. Si elle n’est jamais appelée, la compilation reste possible sans erreur.

class Program
{
    static void Main(string[] args)
    {
        int times;

        Person person = new Person();
    }
}
Langage du code : JavaScript (javascript)

En revanche, pour les champs appartenant à un type, tel que age dans la classe Person ci-dessous, la compilation et l’exécution fonctionnent même sans initialisation explicite.

class Program
{
    static void Main(string[] args)
    {
        int times = 100;
        Console.WriteLine(times);

        Person person = new Person();
        Console.WriteLine(person.age);
    }
}


class Person
{
    public int age;
}   
Langage du code : JavaScript (javascript)

Vous verrez s’afficher la valeur 0. En tant que champ membre de classe sans initialisation manuelle, age reçoit une valeur par défaut de l’initialiseur. La valeur par défaut du type int est 0 ; chaque type possède sa propre valeur par défaut.

Déclarer plusieurs variables sur une même ligne

  1. Une seule ligne ne peut contenir que des variables de même type
  2. Les noms de variables sont séparés par des virgules ; on peut mélanger variables initialisées et non initialisées;
  3. Il est interdit de mélanger plusieurs types de données sur une même ligne.
// Valide
int var3 = 7, var4, var5 = 3;
double var6, var7 = 6.52;

// Invalide ! Mélange int et float
int var8, float var9;
Langage du code : JavaScript (javascript)

Lire la valeur d’une variable

Il suffit d’écrire le nom de la variable pour récupérer la valeur stockée en mémoire :

Console.WriteLine("{0}", var2);Langage du code : JavaScript (javascript)

Variable

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *