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

Commit 8cb6bf7

Browse files
committed
25.10.16
1 parent 805d450 commit 8cb6bf7

1 file changed

Lines changed: 25 additions & 16 deletions

File tree

rust_FAQ.xml

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="ISO-8859-1"?>
22
<document>
3-
<!--XML créé avec la version 16.8 du KitOOoDVP le 24/10/2016 03:31:44-->
3+
<!--XML créé avec la version 16.8 du KitOOoDVP le 25/10/2016 00:09:38-->
44
<!--En-tête d'article-->
55
<entete>
66
<rubrique>89</rubrique>
@@ -1570,6 +1570,9 @@ benchmark_main!(my_bench);</code>
15701570
<paragraph>Tout comme les langages impératifs classiques (e.g. C), Rust ne gère pas les erreurs grâce à un système «&#160;d'exceptions&#160;» comme nous pourrions retrouver dans des langages plus orientés objets, mais grâce au contenu renvoyé en sortie de fonction.</paragraph>
15711571
<paragraph>Plusieurs fonctions (et macros) sont d'ailleurs dédiées à cette gestion (e.g. <inline langage="rust">panic!</inline>, <inline langage="rust">unwrap()</inline> (et ses dérivés), <inline langage="rust">and_then()</inline>) permettant ainsi de rattraper (d'une manière plus ou moins fine) la situation lorsque les conditions imposées par vos soins ne sont pas respectées.</paragraph>
15721572
<paragraph>Cette section regroupe donc un certain nombre de Q/R qui pourrait vous aider à mieux cerner ce système de gestion&#160;:</paragraph>
1573+
<rich-imgtext type="info">
1574+
<paragraph>Toutes les Q/R taggées avec l'icône <image src="./images/WIP.gif"/> sont considérées comme «&#160;en cours de rédaction&#160;». Si vous rencontrez un problème de lecture avec ces Q/R inachevées, ne remontez pas le problème tant qu'elles disposent de ce tag. Merci.</paragraph>
1575+
</rich-imgtext>
15731576
<liste>
15741577
<element>
15751578
<link href="#LII-D-4" title="A quoi sert la macro panic&#160;!&#160;?">A quoi sert la macro panic!&#160;?</link>
@@ -1583,15 +1586,11 @@ benchmark_main!(my_bench);</code>
15831586
<element>
15841587
<link href="#LII-D-7" title="A quoi sert la méthode unwrap_or_else&#160;?">A quoi sert la méthode unwrap_or_else&#160;?</link>
15851588
</element>
1586-
<element>
1587-
<link href="#LII-D-8" title="A quoi sert la méthode map&#160;?">A quoi sert la méthode map&#160;?</link>
1588-
</element>
1589+
<element><link href="#LII-D-8" title="A quoi sert la méthode map&#160;?">A quoi sert la méthode map&#160;?</link> <image src="./images/WIP.gif"/></element>
15891590
<element>
15901591
<link href="#LII-D-9" title="A quoi sert la méthode and_then&#160;?">A quoi sert la méthode and_then&#160;?</link>
15911592
</element>
1592-
<element>
1593-
<link href="#LII-D-10" title="A quoi sert la macro try!&#160;?">A quoi sert la macro try!&#160;?</link>
1594-
</element>
1593+
<element><link href="#LII-D-10" title="A quoi sert la macro try!&#160;?">A quoi sert la macro try!&#160;?</link> <image src="./images/WIP.gif"/></element>
15951594
<element>
15961595
<link href="#LII-D-11" title="Comment utiliser la macro assert!&#160;?">Comment utiliser la macro assert!&#160;?</link>
15971596
</element>
@@ -1601,6 +1600,10 @@ benchmark_main!(my_bench);</code>
16011600
<element>
16021601
<link href="#LII-D-13" title="Comment utiliser la macro debug_assert!&#160;?">Comment utiliser la macro debug_assert!&#160;?</link>
16031602
</element>
1603+
<element>Qu'est-ce que la structure Option&lt;T>&#160;? <image src="./images/WIP.gif"/></element>
1604+
<element>Comment utiliser la structure Option&lt;T>&#160;? <image src="./images/WIP.gif"/></element>
1605+
<element>Qu'est-ce que la structure Result&lt;T, E>&#160;? <image src="./images/WIP.gif"/></element>
1606+
<element>Comment utiliser la structure Result&lt;T, E>&#160;? <image src="./images/WIP.gif"/></element>
16041607
</liste>
16051608
</section>
16061609
<section id="II-D-2">
@@ -1633,7 +1636,7 @@ benchmark_main!(my_bench);</code>
16331636
</section>
16341637
<section id="II-D-4">
16351638
<title>A quoi sert la macro panic&#160;!&#160;?</title>
1636-
<paragraph>La macro panic! pourrait être comparée aux exceptions RuntimeException en Java qui sont, à coup sûr, des erreurs bloquantes.</paragraph>
1639+
<paragraph>La macro <inline langage="rust">panic!</inline> pourrait être comparée aux exceptions <link href="http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html" langue="En" target="_blank" title="Ouvrir un nouvel onglet">RuntimeException</link> en Java qui sont, à coup sûr, des erreurs bloquantes.</paragraph>
16371640
<code dissimulable="1" langage="java" showLines="1" startLine="1" titre="Exemple de dead code">public class MyClass
16381641
{
16391642
public static void main(String[] args)
@@ -1657,8 +1660,8 @@ benchmark_main!(my_bench);</code>
16571660
</section>
16581661
<section id="II-D-5">
16591662
<title>A quoi sert la méthode unwrap&#160;?</title>
1660-
<paragraph>La méthode unwrap() permet de récupérer la donnée contenue par son wrapper et de faire abstraction des «&#160;cas d'analyse&#160;» avant de la (la donnée) délivrer.</paragraph>
1661-
<paragraph>Autrement dit, la méthode unwrap() délivre la donnée enveloppée si l'instance vaut Some() ou Ok(), sinon plante le programme si elle vaut None ou Err().</paragraph>
1663+
<paragraph>La méthode <inline langage="rust">unwrap()</inline> permet de récupérer la donnée contenue par son wrapper et de faire abstraction des «&#160;cas d'analyse&#160;» avant de la délivrer.</paragraph>
1664+
<paragraph>Autrement dit, la méthode <inline langage="rust">unwrap()</inline> délivre la donnée enveloppée si l'instance vaut <inline langage="rust">Some</inline>() ou <inline langage="rust">Ok</inline>(), sinon plante le programme si elle vaut <inline langage="rust">None</inline> ou <inline langage="rust">Err</inline>().</paragraph>
16621665
<code dissimulable="1" langage="rust" showLines="1" startLine="1" titre="Utilisation de la méthode unwrap()">fn main()
16631666
{
16641667
let foo : Option&lt;String> = Some("ça passe!".to_string());
@@ -1677,7 +1680,7 @@ benchmark_main!(my_bench);</code>
16771680
</section>
16781681
<section id="II-D-6">
16791682
<title>A quoi sert la méthode unwrap_or&#160;?</title>
1680-
<paragraph>La méthode unwrap_or() fonctionne exactement comme la méthode originelle mais permet d'éviter de faire «&#160;paniquer&#160;» le programme, et donc l'arrêt de l'exécution, en nous permettant de passer une valeur par défaut à renvoyer si le wrapper visé ne contient rien initialement.</paragraph>
1683+
<paragraph>La méthode <inline langage="rust">unwrap_or()</inline> fonctionne exactement comme la méthode originelle<noteBasPage>unwrap</noteBasPage> mais permet d'éviter de faire «&#160;paniquer&#160;» le programme, et donc l'arrêt de l'exécution, en nous permettant de passer une valeur par défaut à renvoyer si le wrapper visé ne contient rien initialement.</paragraph>
16811684
<code dissimulable="1" langage="rust" showLines="1" startLine="1" titre="Utilisation de la méthode unwrap_or()">fn main()
16821685
{
16831686
let foo : Option&lt;String> = Some("ça passe!".to_string());
@@ -1690,12 +1693,16 @@ benchmark_main!(my_bench);</code>
16901693
Pensez à isoler les appels de la méthode si vous ne souhaitez pas faire planter votre programme.
16911694
*/
16921695
}</code>
1696+
<paragraph>Voir aussi&#160;:</paragraph>
1697+
<paragraph>
1698+
<link href="https://is.gd/gwInIj" target="_blank" title="Ouvrir un nouvel onglet">Tester l'exemple</link>
1699+
</paragraph>
16931700
</section>
16941701
<section id="II-D-7">
16951702
<title>A quoi sert la méthode unwrap_or_else&#160;?</title>
1696-
<paragraph>La méthode unwrap_or_else fonctionne exactement comme unwrap_or, mais proposera de passer en paramètre une fonction à la place d'une simple donnée.</paragraph>
1703+
<paragraph>La méthode <inline langage="rust">unwrap_or_else</inline> fonctionne exactement comme <inline langage="rust">unwrap_or</inline>, mais proposera de passer en paramètre une fonction à la place d'une simple donnée.</paragraph>
16971704
<rich-imgtext type="warning">
1698-
<paragraph>Attention, Option&lt;T> et Result&lt;T, E> l'implémentent toutes les deux, mais pas de la même manière.</paragraph>
1705+
<paragraph>Attention, <inline langage="rust">Option&lt;T></inline> et <inline langage="rust">Result&lt;T, E></inline> l'implémentent toutes les deux, mais pas de la même manière.</paragraph>
16991706
<paragraph>L'une l'implémente de manière à passer en paramètre une closure, l'autre à passer une fonction déclarée et identifiée dans un premier temps.</paragraph>
17001707
</rich-imgtext>
17011708
<code dissimulable="1" langage="rust" showLines="1" startLine="1" titre="Utilisation de la méthode unwrap_or_else">fn bang(arg: String) -> String
@@ -1712,7 +1719,7 @@ fn main()
17121719
bar.unwrap_or_else(|| { return "On évite la casse !".to_string(); });
17131720
println!("{}", bing.unwrap_or_else(bang));
17141721
}</code>
1715-
<paragraph><b>Note&#160;</b>: le paramètre que reçoit la fonction bang n'est ni plus ni moins ce que vous avez renseigné dans le contructeur de l'instance Err() bing. Gardez ceci en tête lorsque vous souhaiterez effectuer des opérations sur ce paramètre dans le corps de votre fonction.</paragraph>
1722+
<paragraph><b>Note&#160;</b>: le paramètre que reçoit la fonction <inline langage="rust">bang</inline> n'est ni plus ni moins ce que vous avez renseigné dans le contructeur de l'instance <inline langage="rust">Err</inline>() <inline langage="rust">bing</inline>. Gardez ceci en tête lorsque vous souhaiterez effectuer des opérations sur ce paramètre dans le corps de votre fonction.</paragraph>
17161723
</section>
17171724
<section id="II-D-8">
17181725
<title>A quoi sert la méthode map&#160;?</title>
@@ -1817,7 +1824,7 @@ fn main() -> ()
18171824
<paragraph><inline langage="rust">debug_assert!</inline> ainsi que ses dérivés (<inline langage="rust">debug_assert_eq!</inline>) ne sont compilées que lorsque le code source est compilé en mode débug. (mode par défaut de <b>rustc</b>)</paragraph>
18181825
<paragraph>Vous ne devez pas compter sur ces assertions pour contrôler le flux de votre programme en production, assurez-vous toujours d'avoir une assertion compilée en mode release.</paragraph>
18191826
<rich-imgtext type="info">
1820-
<paragraph>Si vous souhaitez toutefois les utiliser dans une binaire optimisé, vous devez passer l'argument -C debug-assertions au compilateur.</paragraph>
1827+
<paragraph>Si vous souhaitez toutefois les utiliser dans un binaire optimisé, vous devez passer l'argument -C debug-assertions au compilateur.</paragraph>
18211828
</rich-imgtext>
18221829
<paragraph>
18231830
<b>Comment l'utiliser&#160;?</b>
@@ -1879,6 +1886,8 @@ fn main()
18791886
<paragraph>
18801887
<link href="https://is.gd/kof5ew" langue="Src" target="_blank" title="Ouvrir un nouvel onglet">Le résultat de cet exemple</link>
18811888
</paragraph>
1889+
<paragraph>Qu'est-ce que la structure Option&lt;T>&#160;?</paragraph>
1890+
<paragraph>Comment utiliser la structure Option&lt;T>&#160;?</paragraph>
18821891
</section>
18831892
</section>
18841893
<section id="II-E">
@@ -1900,7 +1909,7 @@ fn main()
19001909
</rich-imgtext>
19011910
</section>
19021911
<section id="II-H">
1903-
<title>Erreurs, difficultés</title>
1912+
<title>Trucs &amp; astuces</title>
19041913
<section id="II-H-1">
19051914
<title>Que puis-je trouver dans cette section&#160;?</title>
19061915
<paragraph>Vous pourrez retrouver des «&#160;trucs et astuces&#160;» pour résoudre un problème plus ou moins commun et complexe.</paragraph>

0 commit comments

Comments
 (0)