Cours de programmation séquentielle

Variables

Orestis Malaspinas

Les variables

Lien entre une valeur et un symbole

  • Symbole liant un identifiant avec une valeur.
  • Le type de la valeur peut être quelconque.
  • Pour déclarer une variable il faut utiliser la forme:

    let symbole = valeur.
    
    fn main() {
      let x = 5; // entier 32 bits
      println!("La valeur de x est: {}", x); // affichage
    
      let y = "La valeur 5 est liée avec la variable x"; // Chaîne de caractères
      println!("La valeur de y est: {}", y); // affichage
    }
    
  • En rust le type d’une variable est inféré (quand c’est possible).
  • Sinon il faut le donner explicitement:

    let symbole: type = valeur.
    
    fn main() {
      let x: i32 = 5; // entier 32 bits
      println!("La valeur de x est: {}", x); // affichage
    }
    

Quelques règles (1/2)

  • Les mot-clés du langage sont interdits pour nommer les variables.
    
    fn main() {
      let if = 7;
    }
    
  • Une variable ne peut pas être utilisée si elle n’est pas déclarée.
    
    fn main() {
      println!("La valeur de x est: {}", x); // affichage
    }
    

Quelques règles (2/2)

  • Une variable ne peut pas être utilisée si elle n’est pas initialisée.
    
    fn main() {
      let x: i32;
      println!("La valeur de x est: {}", x); // affichage
    }
    
  • On peut déclarer une variable, puis l’initialiser en 2 étapes.
    
    fn main() {
      let x; // Déclaration
      x = 5; // Assignation, on préfère écrire `let x = 5;`
      println!("La valeur de x est: {}", x); // affichage
    
      let y = "La valeur 5 est liée avec la variable x"; // Chaîne de caractères
      println!("La valeur de y est: {}", y); // affichage
    }
    

Portée (1/2)

  • La portée d’une variable est le bloc dans lequel elle est déclarée (et tous les blocs inclus).
    
    fn main() {
      let x = 5; 
      {
          println!("La valeur de x est: {}", x);
      }
    }
    
    
    fn main() {
      {
          let x = 5; 
          println!("La valeur de x est: {}", x);
      }
    
      println!("La valeur de x est: {}", x);
    }
    

Portée (2/2)

  • En redéclarant une variable dans un bloc intérieur on peut masquer la variable extérieure.
    
    fn main() {
      let x = 1000; 
      {
          let x = 5; 
          println!("La valeur de x est: {}", x);
      }
    
      println!("La valeur de x est: {}", x);
    }
    

Mutabilité/Immutabilité

  • Les variables sont immutables par défaut.
  • Une variable immutable ne peut pas être modifiée.
  • Si on essaie le compilateur refuser de compiler le programme.
    
    fn main() {
      let x = 5;
      println!("La valeur de x est: {}", x);
    
      x = 6;
      println!("La valeur de x est: {}", x);
    }
    

Mutiabilité/Immutabilité

  • Pour rendre une variable mutable il faut utilise la forme:

    let mut symbole = valeur.
  • Une variable mutable peut être modifiée.
    
    fn main() {
      let mut x = 5;
      println!("La valeur de x est: {}", x);
    
      x = 6;
      println!("La valeur de x est: {}", x);
    }
    

Constantes

  • Les variables immutables ressemblent aux constantes.
  • On les déclare avec la forme:

    const SYMBOLE: type = valeur;
  • Plusieurs différences notables:
    1. On ne peut pas utiliser mut
    2. On doit explicitement déclarer le type d’une constante.
    3. La valeur d’une constante doit être déterminée à la compilation.
    4. Valides durant toute la durée d’un programme.
      
      const PI: f64 = 3.14159265359;
      fn main() {
        println!("La valeur de pi est: {}", PI);
      }
      

Masquage

  • Possibilité de déclarer une variable avec le même nom qu’une variable précédente.
  • La nouvelle déclaration masque la précédente.
    
    fn main() {
      let x = 5;
      let x = x + 1;
      println!("La valeur de x est: {}", x);
    }
    
  • La nouvelle variable n’a pas forcément le même type que la variable d’origine.
    
    fn main() {
      let x = "La variable d'origine";
      println!("La valeur de x est: {}", x);
      let x = x.len();
      println!("La valeur de x est: {}", x);
    }