Rust

Any donation is very welcome
Fork me on GitHub

I. Les bases de la programmation en Rust

9. Les expressions

Il faut bien comprendre que Rust est un langage basé sur les expressions. Avant de bien pouvoir vous les expliquer, il faut savoir qu'il y a les expressions et les déclarations. Leur différence fondamentale est que la première retourne une valeur alors que la seconde non. C'est pourquoi il est possible de faire ceci :

Runlet var = if true {
    1u32
} else {
    2u32
};

Mais pas ça :

Runlet var = (let var2 = 1u32);

C'est tout simplement parce que le mot-clé let introduit une assignation et ne peut donc être considéré comme une expression. C'est donc une déclaration. Ainsi, il est possible de faire :

Runlet mut var = 0i32;
let var2 = (var = 1i32);

Car (var = 1i32) est considéré comme une expression.

Attention cependant, une assignation de valeur retourne le type () (qui est un tuple vide, son équivalent le plus proche en C/C++ est le type void comme je vous l'ai expliqué dans le chapitre précédent) et non la valeur assignée contrairement à un langage comme le C par exemple.

Un autre point important d'une expression est qu'elle ne peut pas se terminer par un point-virgule. Démonstration :

Runlet var: i32 = if true {
    1u32;
} else {
    2u32;
};

Il vous dira à ce moment-là que le if else renvoie '()' et donc qu'il ne peut pas compiler car il attendait un entier car j'ai explicitement demandé au compilateur de créer une variable var de type i32.

Je présume que vous vous dites : "Encore ce '()' ?!". Hé oui. Je pense à présent que vous avez un petit aperçu de ce que sont les expressions. Il est très important que vous compreniez bien ce concept pour pouvoir aborder la suite de ce cours. Un dernier exemple d'une expression :

Runfn test_expression(x: i32) -> i32 {
    if x < 0 {
        println!("{} < 0", x);
        -1
    } else if x == 0 {
        println!("{} == 0", x);
        0
    } else {
        println!("{} > 0", x);
        1
    }
}

Il est temps de passer à la suite !