====== Variables ======
===== Constants par défaut =====
Toutes les variables sont constantes -- ou dit autrement, immuables -- par défaut.
let x = 0;
x = 5; // provoque une erreur, on ne peut changer x
Pour rendre ''x'' mutable, il faut le déclarer.
let mut x = 0;
x = 5; // là c'est bon
===== Les types =====
Comme en [[nsi:langages:c:start|C]], on peut définir finement la taille des données. On pourra ainsi préciser le nombre d'octets codant un nombre entier selon les besoin de notre programme.
* ''i8'' est le type entier 8 bits
* ''i16'', pour 16 bits
* ''i32'', pour 32 bits (même taille que le type ''int'' de [[nsi:langages:python:start|Python]])
* ''i64''
* ''i128''
Nous parlons ici d'entiers signés, c'est à dire qu'ils peuvent être négatif. Un entier de type ''i8'' pour donc aller de ''-128'' à ''127''.
Mais si on sait que l'on n'utilisera que des entiers positifs, on peut utiliser des entiers non signés (//unsigned//)
* ''u8'', entier non signé 8 bits, allant de ''0'' à ''255''
* ''u16'', ''u32'', ''u64'', ''u128'' même principe
Pour les types flottants, on dispose des types simple précision (32 bits) et double précision (64 bits)
* ''f32'' flottant 32 bits
* ''f64'' flottant 64 bits
Les chaînes de caractère on le type ''String''.
Les slices sont des morceaux de tableaux.
==== Inférence de type ====
Quand le compilateur peut deviner le type utilisé, il n'est pas nécessaire de préciser.
let i = 0; // i est de type entier mais on ne sait pas de quelle taille
let j = 10i32; // max de type i32
if i < j { // j étant un i32, i doit l'être également
println!("i est inférieur à j.");
}