diff --git a/variables.md b/variables.md index cd466f4a78ceca9b5de8b31ec3c6cf7efcfc2f7b..935898e96193afc386a8d2c657b4c8e17d2205ef 100644 --- a/variables.md +++ b/variables.md @@ -35,7 +35,6 @@ height: - Pour *déclarer* une variable il faut utiliser la forme: `let symbole = valeur`{.rust}. - <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { let x = 5; // entier 32 bits @@ -45,12 +44,10 @@ fn main() { println!("La valeur de y est: {}", y); // affichage } </code></pre> - - En rust le type d'une variable est **inféré** (quand c'est possible). - Sinon il faut le donner explicitement: `let symbole: type = valeur`{.rust}. - <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { let x: i32 = 5; // entier 32 bits @@ -58,26 +55,31 @@ fn main() { } </code></pre> -## Quelques règles +## Quelques règles (1/2) - Les mot-clés du langage sont interdits pour nommer les variables. - <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { let if = 7; } </code></pre> - -- Une variable ne peut pas être utilisée si elle n'est pas déclarée. - +- Une variable ne peut pas être utilisée si elle n'est pas *déclarée*. <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { println!("La valeur de x est: {}", x); // affichage } </code></pre> -- On peut déclarer une variable, puis l'initialiser. +## Quelques règles (2/2) +- Une variable ne peut pas être utilisée si elle n'est pas *initialisée*. +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let x: i32; + println!("La valeur de x est: {}", x); // affichage +} +</code></pre> +- On peut déclarer une variable, puis l'initialiser en 2 étapes. <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { let x; // Déclaration @@ -89,17 +91,51 @@ fn main() { } </code></pre> -- On peut explicit +## 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). +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let x = 5; + { + println!("La valeur de x est: {}", x); + } +} +</code></pre> +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + { + let x = 5; + println!("La valeur de x est: {}", x); + } + + println!("La valeur de x est: {}", x); +} +</code></pre> + +## Portée (2/2) + +- En redéclarant une variable dans un bloc intérieur on peut **masquer** la variable extérieure. +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let x = 1000; + { + let x = 5; + println!("La valeur de x est: {}", x); + } + + println!("La valeur de x est: {}", x); +} +</code></pre> ## 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. - <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { - let x = 5; // + let x = 5; println!("La valeur de x est: {}", x); x = 6; @@ -111,10 +147,8 @@ fn main() { - Pour rendre une variable **mutable** il faut utilise la forme: - `let mut symbole = valeur`{.rust}. - + `let mut symbole = valeur`{.rust}. - Une variable mutable **peut** être modifiée. - <pre><code data-trim="hljs rust" class="lang-rust"> fn main() { let mut x = 5; @@ -130,7 +164,37 @@ fn main() { - Les variables immutables ressemblent aux *constantes*. - On les déclare avec la forme: -`const SYMBOLE: type = valeur;`{.rust} - + `const SYMBOLE: type = valeur;`{.rust} - Plusieurs différences notables: - 1. On ne peut pas utiliser `mut`{.rust} \ No newline at end of file + 1. On ne peut pas utiliser `mut`{.rust} + 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. +<pre><code data-trim="hljs rust" class="lang-rust"> +const PI: f64 = 3.14159265359; +fn main() { + println!("La valeur de pi est: {}", PI); +} +</code></pre> + +## 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. +<pre><code data-trim="hljs rust" class="lang-rust"> +fn main() { + let x = 5; + let x = x + 1; + println!("La valeur de x est: {}", x); +} +</code></pre> +- La nouvelle variable n'a pas forcément le même type que la variable d'origine. +<pre><code data-trim="hljs rust" class="lang-rust"> +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); +} +</code></pre> +