Skip to content
Snippets Groups Projects
Commit 1341aa92 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added shadowing, scope, ...

parent 1eff4cd1
Branches
Tags v0.2.0
No related merge requests found
Pipeline #
...@@ -35,7 +35,6 @@ height: ...@@ -35,7 +35,6 @@ height:
- Pour *déclarer* une variable il faut utiliser la forme: - Pour *déclarer* une variable il faut utiliser la forme:
`let symbole = valeur`{.rust}. `let symbole = valeur`{.rust}.
<pre><code data-trim="hljs rust" class="lang-rust"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let x = 5; // entier 32 bits let x = 5; // entier 32 bits
...@@ -45,12 +44,10 @@ fn main() { ...@@ -45,12 +44,10 @@ fn main() {
println!("La valeur de y est: {}", y); // affichage println!("La valeur de y est: {}", y); // affichage
} }
</code></pre> </code></pre>
- En rust le type d'une variable est **inféré** (quand c'est possible). - En rust le type d'une variable est **inféré** (quand c'est possible).
- Sinon il faut le donner explicitement: - Sinon il faut le donner explicitement:
`let symbole: type = valeur`{.rust}. `let symbole: type = valeur`{.rust}.
<pre><code data-trim="hljs rust" class="lang-rust"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let x: i32 = 5; // entier 32 bits let x: i32 = 5; // entier 32 bits
...@@ -58,26 +55,31 @@ fn main() { ...@@ -58,26 +55,31 @@ fn main() {
} }
</code></pre> </code></pre>
## Quelques règles ## Quelques règles (1/2)
- Les mot-clés du langage sont interdits pour nommer les variables. - Les mot-clés du langage sont interdits pour nommer les variables.
<pre><code data-trim="hljs rust" class="lang-rust"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let if = 7; let if = 7;
} }
</code></pre> </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"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
println!("La valeur de x est: {}", x); // affichage println!("La valeur de x est: {}", x); // affichage
} }
</code></pre> </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"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let x; // Déclaration let x; // Déclaration
...@@ -89,17 +91,51 @@ fn main() { ...@@ -89,17 +91,51 @@ fn main() {
} }
</code></pre> </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é** ## Mutabilité/**Immutabilité**
- Les variables sont **immutables** par défaut. - Les variables sont **immutables** par défaut.
- Une variable immutable **ne peut pas** être modifiée. - Une variable immutable **ne peut pas** être modifiée.
- Si on essaie le compilateur refuser de compiler le programme. - Si on essaie le compilateur refuser de compiler le programme.
<pre><code data-trim="hljs rust" class="lang-rust"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let x = 5; // let x = 5;
println!("La valeur de x est: {}", x); println!("La valeur de x est: {}", x);
x = 6; x = 6;
...@@ -111,10 +147,8 @@ fn main() { ...@@ -111,10 +147,8 @@ fn main() {
- Pour rendre une variable **mutable** il faut utilise la forme: - 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. - Une variable mutable **peut** être modifiée.
<pre><code data-trim="hljs rust" class="lang-rust"> <pre><code data-trim="hljs rust" class="lang-rust">
fn main() { fn main() {
let mut x = 5; let mut x = 5;
...@@ -130,7 +164,37 @@ fn main() { ...@@ -130,7 +164,37 @@ fn main() {
- Les variables immutables ressemblent aux *constantes*. - Les variables immutables ressemblent aux *constantes*.
- On les déclare avec la forme: - On les déclare avec la forme:
`const SYMBOLE: type = valeur;`{.rust} `const SYMBOLE: type = valeur;`{.rust}
- Plusieurs différences notables: - Plusieurs différences notables:
1. On ne peut pas utiliser `mut`{.rust} 1. On ne peut pas utiliser `mut`{.rust}
\ No newline at end of file 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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment