Comment importer un module depuis un autre fichier en Rust : guide pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment inclure un module depuis un autre fichier en Rust : du débutant à l'utilisateur averti

\n\n

Avez-vous déjà écrit du code en Rust et réalisé soudainement que votre main.rs se transformait en un monstre géant de 500 lignes ? Cela vous dit quelque chose ? Ou peut-être commencez-vous tout juste à apprendre Rust et souhaitez-vous comprendre comment organiser correctement votre code en le divisant en plusieurs fichiers. La question "How can I include a module from another file from the same project?" est l'une des plus populaires sur Stack Overflow, et pour cause. Le système de modules de Rust est à la fois puissant et... un peu contre-intuitif pour les débutants.

\n\n

Dans cet article, nous allons tout détailler de A à Z : comment créer un module, comment l'importer, quels sont les pièges à éviter et comment ne pas marcher sur un râteau. C'est parti !

\n\n

Pourquoi les modules en Rust ne sont pas simplement un "include" ?

\n\n

Si vous venez de Python ou JavaScript, vous êtes habitué à import ou require. En Rust, c'est un peu différent. Il n'y a pas de "prends ce fichier et utilise-le" magique. Rust utilise plutôt un système de modules déclaratif. Vous devez explicitement dire au compilateur : "Hé, ce fichier fait partie de mon projet, et voici comment il s'appelle".

\n\n

La règle principale à retenir est : chaque fichier est un module, mais tous les modules ne sont pas des fichiers. Cela ressemble à une énigme, n'est-ce pas ? On va éclaircir tout ça.

\n\n

Structure du projet : par où commencer

\n\n

Supposons que vous ayez un projet avec cette structure :

\n\n
my_project/\n├── Cargo.toml\n├── src/\n│   ├── main.rs\n│   ├── greetings.rs\n│   └── utils/\n│       ├── mod.rs\n│       └── helpers.rs
\n\n

Ici, greetings.rs est un module simple, et utils/ est un dossier contenant un module. Apprenons à les importer.

\n\n

Méthode 1 : Importer un fichier-module simple

\n\n

Le cas le plus basique. Vous avez greetings.rs avec une fonction :

\n\n
// greetings.rs\npub fn say_hello() {\n    println!("Bonjour depuis le module greetings !");\n}
\n\n

Pour utiliser ce module dans main.rs, vous devez faire deux choses :

\n\n
    \n
  1. Déclarer le module avec le mot-clé mod
  2. \n
  3. Importer les éléments nécessaires avec use
  4. \n
\n\n
// main.rs\nmod greetings; // déclare le module\n\nuse greetings::say_hello; // importe la fonction\n\nfn main() {\n    say_hello(); // utilise\n}
\n\n

Et voilà ! Rust cherche automatiquement le fichier greetings.rs dans le même dossier que main.rs. Si le fichier est trouvé, le module est importé.

\n\n

Important : la fonction say_hello est marquée comme pub. Si vous oubliez pub, le compilateur vous dira que la fonction est privée et inaccessible depuis l'extérieur. C'est l'une des erreurs les plus fréquentes chez les débutants.

\n\n

Méthode 2 : Module dans un dossier (mod.rs ou lib.rs)

\n\n

Lorsque votre projet s'agrandit, il est pratique de regrouper les modules dans des dossiers. Pour cela, on utilise un fichier mod.rs à l'intérieur du dossier. Il sert de "point d'entrée" du module.

\n\n

Créons un dossier utils/ et à l'intérieur un fichier mod.rs :

\n\n
// utils/mod.rs\npub mod helpers; // déclare le module imbriqué
\n\n

Créons maintenant helpers.rs :

\n\n
// utils/helpers.rs\npub fn do_something() {\n    println!("Faire quelque chose d'utile");\n}
\n\n

Dans main.rs, on importe comme ceci :

\n\n
// main.rs\nmod utils; // déclare le module utils (cherche utils/mod.rs)\n\nuse utils::helpers::do_something;\n\nfn main() {\n    do_something();\n}
\n\n

Notez que mod utils; demande à Rust de chercher utils/mod.rs ou utils.rs. S'il trouve mod.rs — parfait, s'il trouve utils.rs — cela fonctionne aussi. Mais vous ne pouvez pas avoir les deux fichiers en même temps — le compilateur serait confus.

\n\n

Méthode 3 : Approche moderne (Rust 201

Blogs

Book Recommendations