Skip to content
This repository was archived by the owner on May 18, 2023. It is now read-only.

Commit 19bcb2c

Browse files
authored
Merge pull request #28 from Songbird0/WIP
Ajout d'une arborescence
2 parents 307392f + 11a4500 commit 19bcb2c

File tree

2 files changed

+178
-14
lines changed

2 files changed

+178
-14
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Forkez, rendez-vous dans le répertoire [`rust_FAQ_Markdown`](rust_FAQ_Markdown/
3838

3939
Vous lisez ce README ailleurs que sur le dépôt ? Dans ce cas, suivez ce [lien](https://github.com/Songbird0/Rust_FAQ/tree/master/rust_FAQ_Markdown), s'il vous plaît.
4040

41-
Il est également possible de contribuer à la relecture/progression de la FAQ directement sur [developpez.com](developpez.com), [soumettez-votre Q/R](http://rust.developpez.com/faq/?page=Langage#addForm).
41+
Il est également possible de contribuer à la relecture/progression de la FAQ directement sur [developpez.com](developpez.com), [soumettez votre Q/R](http://rust.developpez.com/faq/?page=Langage#addForm).
4242

4343

4444
## Licence et condition d'utilisation

rust_FAQ_Markdown/rust_FAQ.md

Lines changed: 177 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,105 @@
22

33
cf. [README.md](../README.md), s'il vous plaît.
44

5+
#Aborescence de la FAQ
6+
7+
- [Langage](#langage)
8+
- [Questions générales](#questions-générales)
9+
- [Comment déclarer une variable ?](#comment-déclarer-une-variable)
10+
- [Comment assigner un objet par référence ?](#comment-assigner-un-objet-par-référence)
11+
- [Rust possède-t-il un typage dynamique ?](#rust-possède-t-il-un-typage-dynamique)
12+
- [Comment typer ses données/variables ?](#comment-typer-ses-donnéesvariables)
13+
- [Quelle est la différence entre `&str` et `String` ?](#quelle-est-la-différence-entre-str-et-string)
14+
- [Comment créer une chaîne de caractères ?](#comment-créer-une-chaîne-de-caractères)
15+
- [Quelle version de Rust est recommandée ?](#quelle-version-de-rust-est-recommandée)
16+
- [Rust est-il orienté objet ?](#rust-est-il-orienté-objet)
17+
- [Qu'est-ce qu'un `trait` ?](#quest-ce-quun-trait)
18+
- [Rust supporte-t-il la surcharge des fonctions ?](#rust-supporte-t-il-la-surchage-des-fonctions)
19+
- [Comment déclarer des paramètres optionnels ?](#comment-déclarer-des-paramètres-optionnels)
20+
- [Comment créer un tableau ?](#comment-créer-un-tableau)
21+
- [A quoi sert le mot-clé `super` ?](#À-quoi-sert-le-mot-clé-super)
22+
- [A quoi sert le mot-clé `self` ?](#a-quoi-sert-le-mot-clé-self)
23+
- [A quoi sert le mot-clé `use` ?](#a-quoi-sert-le-mot-clé-use)
24+
- [A quoi sert le mot-clé `pub` ?](#a-quoi-sert-le-mot-clé-pub)
25+
- [A quoi servent les mot-clés `extern crate` ?](#À-quoi-servent-les-mot-clés-extern-crate)
26+
- [A quoi sert le mot-clé `mod` ?](#À-quoi-sert-le-mot-clé-mod)
27+
- [A quoi sert un module ?](#À-quoi-sert-un-module)
28+
- [Comment créer un module ?](#comment-créer-un-module)
29+
- [A quoi sert le mot-clé `type` ?](#À-quoi-sert-le-mot-clé-type)
30+
- [A quoi sert le mot-clé `loop` ?](#À-quoi-sert-le-mot-clé-loop)
31+
- [A quoi sert le mot-clé `where` ?](#À-quoi-sert-le-mot-clé-where)
32+
- [A quoi sert le mot-clé `unsafe` ?](#À-quoi-sert-le-mot-clé-unsafe)
33+
- [Quelles sont les règles non appliquées dans ces contextes ?](#quelles-sont-les-règles-non-appliquées-dans-ces-contextes)
34+
- [Quels comportements sont considérés "non sûrs" par Rust ?](#quels-comportements-sont-considérés-non-sûrs-par-rust)
35+
- [A quoi sert le mot-clé `fn` ?](#À-quoi-sert-le-mot-clé-fn)
36+
- [A quoi sert le mot-clé `match` ?](#À-quoi-sert-le-mot-clé-match)
37+
- [A quoi sert le mot-clé `ref` ?](#À-quoi-sert-le-mot-clé-ref)
38+
- [A quoi sert le mot-clé `mut` ?](#À-quoi-sert-le-mot-clé-mut)
39+
- [Une erreur survient lorsque je modifie le contenu de ma variable ! Que faire ?](#une-erreur-survient-lorsque-que-je-modifie-le-contenu-de-ma-variable-que-faire)
40+
- [Qu'est-ce qu'une macro ?](#quest-ce-quune-macro)
41+
- [Comment créer une macro ?](#comment-créer-une-macro)
42+
- [Que sont les spécificateurs ?](#que-sont-les-spécificateurs)
43+
- [A quoi sert le mot-clé `usize` ?](#À-quoi-sert-le-mot-clé-usize)
44+
- [A quoi sert le mot-clé `isize` ?](#À-quoi-sert-le-mot-clé-isize)
45+
- [Existe-t-il des outils de build pour le langage Rust ?](#existe-t-il-des-outils-de-build-pour-le-langage-rust)
46+
- [Comment utiliser mes fonctions en dehors de mon module ?](#comment-utiliser-mes-fonctions-en-dehors-de-mon-module)
47+
- [Comment comparer deux objets avec Rust ?](#comment-comparer-deux-objets-avec-rust)
48+
- [Qu'est-ce que le shadowing ?](#quest-ce-que-le-shadowing)
49+
- [Qu'est-ce que la destructuration ?](#quest-ce-que-la-destructuration)
50+
- [Comment effectuer une déstructuration sur une liste ?](#comment-effectuer-une-destructuration-sur-une-liste)
51+
- [Comment effectuer une déstructuration sur une énumération ?](#comment-effectuer-une-destructuration-sur-une-énumération-)
52+
- [Comment effectuer une déstructuration sur une structure ?](#comment-effectuer-une-destructuration-sur-une-structure-)
53+
- [Comment comparer deux objets d'une structure personnalisée avec Rust ?](#comment-comparer-deux-objets-dune-structure-personnalisée-avec-rust)
54+
- [Je n'arrive pas à utiliser les macros importées par ma bibliothèque ! Pourquoi ?](#je-narrive-pas-à-utiliser-les-macros-importées-par-ma-bibliothèque-pourquoi)
55+
- [A quoi servent les mot-clés `if let` ?](#À-quoi-servent-les-mot-clés-if-let)
56+
- [A quoi servent les mot-clés `while let` ?](#À-quoi-servent-les-mot-clés-while-let)
57+
- [Mécaniques et philosophies](#mécaniques-et-philosophies)
58+
- [Gestion de la mémoire](#gestion-de-la-mémoire)
59+
- [Le développeur doit-il gérer la mémoire seul ?](#le-développeur-doit-il-gérer-la-mémoire-seul)
60+
- [Qu'est-ce que "l'ownership" ?](#quest-ce-que-lownership)
61+
- [Qu'est-ce que le concept de "borrowing" ?](#quest-ce-que-le-concept-de-borrowing)
62+
- [Qu'est-ce que le concept de "lifetime" ?](#quest-ce-que-le-concept-de-lifetime)
63+
- [Outils de build](#outils-de-build)
64+
- [Comment créer un projet avec Cargo ?](#comment-créer-un-projet-avec-cargo)
65+
- [Quel type de projet puis-je créer avec Cargo ?](#quel-type-de-projet-puis-je-créer-avec-cargo)
66+
- [Comment compiler son projet ?](#comment-compiler-son-projet)
67+
- [Peut-on générer de la documentation avec Cargo ?](#peut-on-générer-de-la-documentation-avec-cargo)
68+
- [Où trouver de nouvelles bibliothèques ?](#où-trouver-de-nouvelles-bibliothèques)
69+
- [Comment installer de nouvelles bibliothèques ?](#comment-installer-de-nouvelles-bibliothèques)
70+
- [Comment publier sa bibliothèque faite maison ?](#comment-publier-sa-bibliothèque-faite-maison)
71+
- [Comment lancer des tests avec Cargo ?](#comment-lancer-des-tests-avec-cargo)
72+
- [Comment mettre à jour mes bibliothèques ?](#comment-mettre-à-jour-mes-bibliothèques)
73+
- [Comment créer ses benchmarks avec Cargo ?](#comment-créer-ses-benchmarks-avec-cargo)
74+
- [A quoi sert benchmark_group!](#À-quoi-sert-benchmark_group)
75+
- [A quoi sert benchmak_main!](#À-quoi-sert-benchmark_main)
76+
- [Gestion des erreurs](#gestion-des-erreurs)
77+
- [Comment s'effectue la gestion des erreurs avec Rust ?](#comment-seffectue-la-gestion-des-erreurs-avec-rust)
78+
- [A quoi sert la macro `panic!` ?](#À-quoi-sert-la-macro-panic)
79+
- [A quoi sert la méthode `unwrap` ?](#À-quoi-sert-la-méthode-unwrap)
80+
- [A quoi sert la méthode `unwrap_or` ?](#À-quoi-sert-la-méthode-unwrap_or)
81+
- [A quoi sert la méthode `unwrap_or_else` ?](#À-quoi-sert-la-méthode-unwrap_or_else)
82+
- [A quoi sert la méthode `map` ?](#À-quoi-sert-la-méthode-map)
83+
- [A quoi sert la méthode `and_then` ?](#À-quoi-sert-la-méthode-and_then)
84+
- [A quoi sert la macro `try!` ?](#À-quoi-sert-la-macro-try)
85+
- [Comment utiliser la macro `assert!` ?](#comment-utiliser-la-macro-assert)
86+
- [Comment utiliser la macro `assert_eq!` ?](#comment-utiliser-la-macro-assert_eq)
87+
- [Comment utiliser la macro `debug_assert!` ?](#comment-utiliser-la-macro-debug_assert)
88+
- [Qu'est-ce que l'énumération `Result<T>` ?](#quest-ce-que-lénumération-result)
89+
- [Comment utiliser l'énumération `Result<T>` ?](#comment-utiliser-lénumération-result)
90+
- [Qu'est-ce que l'énumération `Option<T, E>` ?](#quest-ce-que-lénumération-option)
91+
- [Comment utiliser l'énumération `Option<T, E>` ?](#comment-utiliser-lénumération-option)
92+
- [Metadonnées/Annotations](#meta-données)
93+
- [I/O](#io)
94+
- [Que puis-je trouver dans cette section ?](#que-puis-je-trouver-dans-cette-section-)
95+
- [Comment créer un fichier ?](#comment-créer-un-fichier-)
96+
- [Comment lire le contenu d'un fichier ?](#comment-lire-le-contenu-dun-fichier-)
97+
- [Comment écrire à l'intérieur d'un fichier ?](#comment-écrire-à-lintérieur-dun-fichier-)
98+
- [Comment différencier un fichier d'un répertoire ?](#comment-différencier-un-fichier-dun-répertoire-)
99+
- [Comment lister les objets d'un répertoire ?](#comment-lister-les-objets-dun-répertoire-)
100+
- [Trucs & astuces](trucs--astuces)
101+
- [Que puis-je trouver dans cette section ?](#que-puis-je-trouver-dans-cette-section)
102+
- [Comment récupérer le vecteur d'une instance de la structure `Chars` ?](#comment-récupérer-le-vecteur-dune-instance-de-la-structure-chars)
103+
5104
# Langage
6105

7106
## Questions générales
@@ -753,10 +852,27 @@ Liens :
753852

754853
[Visionner le résultat de cet exemple.](https://is.gd/nHfcEQ "Exemple d'utilisation d'une macro")
755854

756-
[Que sont les spécificateurs ?]()
855+
[Que sont les spécificateurs ?](#que-sont-les-spécificateurs)
757856

758857
### Que sont les spécificateurs ?
759858

859+
Les spécificateurs sont des types d'entrées supportés par les macros; Il faut noter toutefois que ces fameux types font abstraction de la nature de l'entrée. (e.g. que l'entrée soit une châine de caractères ou un entier importe peu)
860+
861+
Vous pouvez retrouver, ci-dessous, une traduction de chaque description des spécificateurs proposés par le langage:
862+
863+
- `ident`: un identifiant. e.g. `x`; `foo`.
864+
- `path`: une représentation d'un chemin à travers les ressources d'un package. e.g. `T::SpecialA`. (à revoir pour la trad)
865+
- `expr`: une expression. e.g. `2 + 2`; `if true { 1 } else { 2 }`; `f(42)`.
866+
- `ty`: Un type. e.g. `i32`, `&T`, `Vec<(char, String)>`.
867+
- `pat`: Un modèle/pattern. e.g. `Some(t)`; `(17, 'a')`; `_`.
868+
- `stmt`: Une (et une seule) déclaraction. e.g. `let some = 3`.
869+
- `block`: Une suite de déclarations enveloppée par des crochets et/ou une expression. e.g. `{log(error, "hi"); return 12;}`.
870+
- `item`: Un objet. e.g. `fn foo(){}`; `struct Bar;`.
871+
- `meta`: Un "meta objet", qui pourrait également être nommé "attribut". e.g. `cfg(target_os = "windows")`.
872+
- `tt`: Un *token tree*. Certainement le type le plus puissant de la liste, puisqu'il vous permet de soumettre tout ce qui existe dans la syntaxe du langage.
873+
874+
### Qu'est-ce qu'un item ?
875+
760876
### À quoi sert le mot-clé usize ?
761877

762878
Le mot-clé `usize` permet de laisser le compilateur choisir la taille en mémoire d'un entier *non-signé* (selon l'architecture de la machine sur laquelle le programme sera exécuté).
@@ -1107,6 +1223,8 @@ while let Some(x) = v.pop() {
11071223
}
11081224
```
11091225

1226+
### Comment étendre un trait sur un autre trait ?
1227+
11101228
## Mécaniques et philosophies
11111229

11121230
### Gestion de la mémoire
@@ -1153,7 +1271,7 @@ C'est un exemple simple, mais qui (dans nos débuts) peut être une véritable p
11531271

11541272
C'est simple :
11551273

1156-
La variable foo étant un pointeur contenant l'adresse mémoire d'un objet String, il est courant de dire qu'il possède « l'ownership », il est le seul à pouvoir utiliser cette ressource.
1274+
La variable `foo` étant un pointeur contenant l'adresse mémoire d'un objet String, il est courant de dire qu'il possède « l'ownership », il est le seul à pouvoir utiliser cette ressource.
11571275

11581276
C'est en copiant les informations relatives à l'objet String (en « déplacant » ces informations dans une nouvelle variable, donc) que le *garbage* *collector* va faire son travail : détruire le pointeur *foo* pour attribuer « l'ownership » au nouveau pointeur de la ressource : *bar*.
11591277

@@ -1311,7 +1429,6 @@ Voir aussi :
13111429

13121430
[La section dédiée du livre](https://doc.rust-lang.org/book/lifetimes.html)
13131431

1314-
#### Comment étendre un trait sur un autre trait ?
13151432

13161433
## Outils de build
13171434

@@ -1626,20 +1743,22 @@ Cette section regroupe donc un certain nombre de Q/R qui pourrait vous aider à
16261743
* [A quoi sert la méthode unwrap ?](#a-quoi-sert-la-méthode-unwrap)
16271744
* [A quoi sert la méthode unwrap_or ?](#a-quoi-sert-la-méthode-unwrap_or)
16281745
* [A quoi sert la méthode unwrap_or_else ?](#a-quoi-sert-la-méthode-unwrap_or_else)
1629-
* [A quoi sert la méthode map ?](#a-quoi-sert-la-méthode-map) ![](./images/WIP.gif)
1746+
* [A quoi sert la méthode map ?](#a-quoi-sert-la-méthode-map)
16301747
* [A quoi sert la méthode and_then ?](#a-quoi-sert-la-méthode-and_then)
1631-
* [A quoi sert la macro try! ?](#a-quoi-sert-la-macro-try) ![](./images/WIP.gif)
1748+
* [A quoi sert la macro try! ?](#a-quoi-sert-la-macro-try)
16321749
* [Comment utiliser la macro assert! ?](#comment-utiliser-la-macro-assert)
16331750
* [Comment utiliser la macro assert_eq! ?](#comment-utiliser-la-macro-assert_eq)
16341751
* [Comment utiliser la macro debug_assert! ?](#comment-utiliser-la-macro-debug_assert)
1635-
* [Qu'est-ce que l'énumération Option<T> ?](#quest-ce-que-lénumération-option) ![](./images/WIP.gif)
1636-
* [Comment utiliser l'énumération Option<T> ?](#comment-utiliser-lénumération-option) ![](./images/WIP.gif)
1637-
* [Qu'est-ce que l'énumération Result<T, E> ?](#quest-ce-que-lénumération-result) ![](./images/WIP.gif)
1638-
* [Comment utiliser l'énumération Result<T, E> ?](#comment-utiliser-lénumération-result) ![](./images/WIP.gif)
1752+
* [Qu'est-ce que l'énumération Option<T> ?](#quest-ce-que-lénumération-option)
1753+
* [Comment utiliser l'énumération Option<T> ?](#comment-utiliser-lénumération-option)
1754+
* [Qu'est-ce que l'énumération Result<T, E> ?](#quest-ce-que-lénumération-result)
1755+
* [Comment utiliser l'énumération Result<T, E> ?](#comment-utiliser-lénumération-result)
16391756

16401757
### Comment créer un type spécifique d'exceptions ?
16411758

1642-
Il n'est pas possible de créer une structure censée représenter un type d'erreur, comme nous pourrions le faire en Java ; Rust ne gère pas les potentielles de cette manière.
1759+
Il n'est pas possible de créer une structure censée représenter un type d'erreur, comme nous pourrions le faire en Java; Rust ne gère pas les potentielles de cette manière.
1760+
1761+
16431762

16441763
Voir aussi :
16451764

@@ -1651,9 +1770,9 @@ Oui, bien entendu.
16511770

16521771
Il existe trois assertions différentes en Rust (toutes encapsulées par une macro) :
16531772

1654-
1. [assert!](https://doc.rust-lang.org/std/macro.assert!.html "Ouvrir un nouvel onglet")!;
1655-
2. [assert_eq!](https://doc.rust-lang.org/std/macro.assert_eq!.html "Ouvrir un nouvel onglet")!;
1656-
3. [debug_assert!](https://doc.rust-lang.org/std/macro.debug_assert!.html "Ouvrir un nouvel onglet")!.
1773+
1. [assert!](https://doc.rust-lang.org/std/macro.assert!.html "Ouvrir un nouvel onglet");
1774+
2. [assert_eq!](https://doc.rust-lang.org/std/macro.assert_eq!.html "Ouvrir un nouvel onglet");
1775+
3. [debug_assert!](https://doc.rust-lang.org/std/macro.debug_assert!.html "Ouvrir un nouvel onglet").
16571776

16581777
Voir aussi :
16591778

@@ -2027,8 +2146,37 @@ Dans cette section, vous retrouverez toutes les questions couramment posées con
20272146

20282147
### Comment créer un fichier ?
20292148

2149+
Pour créer un fichier, rien de plus simple, il vous faudra utiliser la structure `File`.
2150+
2151+
```rust
2152+
use std::io;
2153+
use std::fs::File;
2154+
2155+
fn foo() -> io::Result<()> //vous pouvez mettre ce que vous voulez dans le diamant pour que ça compile.
2156+
{
2157+
let mut file = File::create("thecakeisalie.txt")?;
2158+
Ok(())
2159+
}
2160+
```
2161+
20302162
### Comment lire le contenu d'un fichier ?
20312163

2164+
Pour lire un fichier, il vous faudra utiliser la structure `File` et le trait `Read`.
2165+
La procédure est presque identique à celle qui vous permet de créer votre fichier.
2166+
2167+
```rust
2168+
use std::io;
2169+
use std::fs::File;
2170+
2171+
fn foo() -> io::Result<()> //vous pouvez mettre ce que vous voulez dans le diamant pour que ça compile.
2172+
{
2173+
let mut file = File::open("thecakeisalie.txt")?;
2174+
let mut string = String::new();
2175+
file.read_to_string(&mut string)?;
2176+
Ok(())
2177+
}
2178+
```
2179+
20322180
### Comment écrire à l'intérieur d'un fichier ?
20332181

20342182
### Comment différencier un fichier d'un répertoire ?
@@ -2098,3 +2246,19 @@ error[E0277]: the trait bound `&std::str::Chars<'_>: std::iter::Iterator` is not
20982246
Mais vous récolterez encore une erreur…
20992247

21002248
Le compilateur vous invite alors à essayer d'appeler la méthode `.iter()` qui est censée être implémentée par toutes les structures implémentant l'interface `Iterator`.
2249+
2250+
#### Que faire alors ?
2251+
2252+
La méthode remplaçant `.iter()` est `.collect()`; Cette dernière vous permet de récupérer un vecteur contenant toutes les entités de l'ancien itérateur.
2253+
Vous pouvez désormais accéder à votre ressource par référence et ainsi la parcourir autant de fois que vous le souhaitez.
2254+
2255+
```Rust
2256+
fn main()
2257+
{
2258+
let foo = String::from("Hello");
2259+
let bar = foo.chars();
2260+
let baz : Vec<char> = bar.collect();
2261+
for letter in &baz {}
2262+
for letter in &baz {}
2263+
}
2264+
```

0 commit comments

Comments
 (0)