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

ajout visibilité avec pub et use

parent 640fdb15
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -151,4 +151,130 @@ sansfont: Sans Serif
```{.lang-rust}
mon_module::ma_fonction();
mon_module::mon_autre_module::ma_fonction();
```
\ No newline at end of file
```
# Visibilité
## Modules (1/4)
- Structure fichiers:
- `src/lib.rs`
```{.lang-rust}
mod mon_module;
```
- `src/mon_module/mod.rs`
```{.lang-rust}
fn ma_fonction() {
unimplemented!(); // macro très pratique!
}
```
- `src/main.rs`
```{.lang-rust}
extern crate ma_librairie;
fn main() {
ma_librarie::mon_module::ma_fonction();
}
```
## Modules (2/4)
- Par défaut les modules sont privés.
```
$ cargo build
Compiling ma_librairie v0.1.0 ($PATH/ma_librairie)
error[E0603]: module `mon_module` is private
--> src/main.rs:4:2
|
4 | ma_librairie::mon_module::ma_fonction();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0603`.
error: Could not compile `ma_librairie`.
To learn more, run the command again with --verbose.
```
## Modules (3/4)
- On contrôle la visibilité des modules avec `pub`{.rust}.
- On a joute `pub mon module` dans `src/lib.rs`
```{.lang-rust}
pub mod mon_module;
```
- Par défaut les fonctions sont privées.
```
$ cargo build
Compiling ma_librairie v0.1.0 ($PATH/ma_librairie)
error[E0603]: function `ma_fonction` is private
--> src/main.rs:4:2
|
4 | ma_librairie::mon_module::ma_fonction();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0603`.
error: Could not compile `ma_librairie`.
To learn more, run the command again with --verbose.
```
## Modules (4/4)
- On a joute `pub fn ma_fonction()` dans `src/mon_module.rs`
```
Compiling ma_librairie v0.1.0 ($PATH/ma_librairie)
Finished dev [unoptimized + debuginfo] target(s) in 1.28s
```
- Quand plusieurs modules sont imbriqués, les appels sont longs: `ma_librarie::mon_module::ma_fonction();`{.rust}
- Avec `use`{.rust}, on peut se simplifier la vie `src/main.rs`
```{.lang-rust}
extern crate ma_librairie;
use ma_librairie::mon_module::ma_fonction;
fn main() {
ma_fonction();
}
```
- Ou encore avec `*` on peut rendre visible tout le module
```{.lang-rust}
extern crate ma_librairie;
use ma_librairie::mon_module::*;
fn main() {
ma_fonction();
}
```
# Résumé
- Les modules permettent de compartimenter le code.
- Par défaut tout ce qui se trouve dans un module est privé.
- On contrôle la visibilité avec `pub`{.rust}
- Si un item est public il peut être accédé depuis n'importe quel module parent.
- Si un item est privé il n'est accessible que depuis son parent direct et n'importe lequel de ses modules enfants.
- On peut rendre visible des sous-modules, ou des items avec `use`{.rust}.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment