You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on May 18, 2023. It is now read-only.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,7 +38,7 @@ Forkez, rendez-vous dans le répertoire [`rust_FAQ_Markdown`](rust_FAQ_Markdown/
38
38
39
39
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.
40
40
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), [soumettezvotre Q/R](http://rust.developpez.com/faq/?page=Langage#addForm).
-[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)
-[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)
-[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
+
5
104
# Langage
6
105
7
106
## Questions générales
@@ -753,10 +852,27 @@ Liens :
753
852
754
853
[Visionner le résultat de cet exemple.](https://is.gd/nHfcEQ"Exemple d'utilisation d'une macro")
755
854
756
-
[Que sont les spécificateurs ?]()
855
+
[Que sont les spécificateurs ?](#que-sont-les-spécificateurs)
757
856
758
857
### Que sont les spécificateurs ?
759
858
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
+
760
876
### À quoi sert le mot-clé usize ?
761
877
762
878
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() {
1107
1223
}
1108
1224
```
1109
1225
1226
+
### Comment étendre un trait sur un autre trait ?
1227
+
1110
1228
## Mécaniques et philosophies
1111
1229
1112
1230
### 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
1153
1271
1154
1272
C'est simple :
1155
1273
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.
1157
1275
1158
1276
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*.
1159
1277
@@ -1311,7 +1429,6 @@ Voir aussi :
1311
1429
1312
1430
[La section dédiée du livre](https://doc.rust-lang.org/book/lifetimes.html)
1313
1431
1314
-
#### Comment étendre un trait sur un autre trait ?
1315
1432
1316
1433
## Outils de build
1317
1434
@@ -1626,20 +1743,22 @@ Cette section regroupe donc un certain nombre de Q/R qui pourrait vous aider à
1626
1743
*[A quoi sert la méthode unwrap ?](#a-quoi-sert-la-méthode-unwrap)
1627
1744
*[A quoi sert la méthode unwrap_or ?](#a-quoi-sert-la-méthode-unwrap_or)
1628
1745
*[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)
1746
+
*[A quoi sert la méthode map ?](#a-quoi-sert-la-méthode-map)
1630
1747
*[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)
1748
+
*[A quoi sert la macro try! ?](#a-quoi-sert-la-macro-try)
1632
1749
*[Comment utiliser la macro assert! ?](#comment-utiliser-la-macro-assert)
1633
1750
*[Comment utiliser la macro assert_eq! ?](#comment-utiliser-la-macro-assert_eq)
1634
1751
*[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)
### Comment créer un type spécifique d'exceptions ?
1641
1758
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
+
1643
1762
1644
1763
Voir aussi :
1645
1764
@@ -1651,9 +1770,9 @@ Oui, bien entendu.
1651
1770
1652
1771
Il existe trois assertions différentes en Rust (toutes encapsulées par une macro) :
1653
1772
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").
1657
1776
1658
1777
Voir aussi :
1659
1778
@@ -2027,8 +2146,37 @@ Dans cette section, vous retrouverez toutes les questions couramment posées con
2027
2146
2028
2147
### Comment créer un fichier ?
2029
2148
2149
+
Pour créer un fichier, rien de plus simple, il vous faudra utiliser la structure `File`.
2150
+
2151
+
```rust
2152
+
usestd::io;
2153
+
usestd::fs::File;
2154
+
2155
+
fnfoo() ->io::Result<()> //vous pouvez mettre ce que vous voulez dans le diamant pour que ça compile.
2156
+
{
2157
+
letmutfile=File::create("thecakeisalie.txt")?;
2158
+
Ok(())
2159
+
}
2160
+
```
2161
+
2030
2162
### Comment lire le contenu d'un fichier ?
2031
2163
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
+
usestd::io;
2169
+
usestd::fs::File;
2170
+
2171
+
fnfoo() ->io::Result<()> //vous pouvez mettre ce que vous voulez dans le diamant pour que ça compile.
2172
+
{
2173
+
letmutfile=File::open("thecakeisalie.txt")?;
2174
+
letmutstring=String::new();
2175
+
file.read_to_string(&mutstring)?;
2176
+
Ok(())
2177
+
}
2178
+
```
2179
+
2032
2180
### Comment écrire à l'intérieur d'un fichier ?
2033
2181
2034
2182
### 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
2098
2246
Mais vous récolterez encore une erreur…
2099
2247
2100
2248
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.
0 commit comments