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.
<paragraph>Tout comme les langages impératifs classiques (e.g. C), Rust ne gère pas les erreurs grâce à un système « d'exceptions » comme nous pourrions retrouver dans des langages plus orientés objets, mais grâce au contenu renvoyé en sortie de fonction.</paragraph>
1571
1571
<paragraph>Plusieurs fonctions (et macros) sont d'ailleurs dédiées à cette gestion (e.g. <inlinelangage="rust">panic!</inline>, <inlinelangage="rust">unwrap()</inline> (et ses dérivés), <inlinelangage="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>
1572
1572
<paragraph>Cette section regroupe donc un certain nombre de Q/R qui pourrait vous aider à mieux cerner ce système de gestion :</paragraph>
1573
+
<rich-imgtexttype="info">
1574
+
<paragraph>Toutes les Q/R taggées avec l'icône <imagesrc="./images/WIP.gif"/> sont considérées comme « en cours de rédaction ». 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>
1573
1576
<liste>
1574
1577
<element>
1575
1578
<linkhref="#LII-D-4"title="A quoi sert la macro panic ! ?">A quoi sert la macro panic! ?</link>
<linkhref="#LII-D-7"title="A quoi sert la méthode unwrap_or_else ?">A quoi sert la méthode unwrap_or_else ?</link>
1585
1588
</element>
1586
-
<element>
1587
-
<linkhref="#LII-D-8"title="A quoi sert la méthode map ?">A quoi sert la méthode map ?</link>
1588
-
</element>
1589
+
<element><linkhref="#LII-D-8"title="A quoi sert la méthode map ?">A quoi sert la méthode map ?</link> <imagesrc="./images/WIP.gif"/></element>
1589
1590
<element>
1590
1591
<linkhref="#LII-D-9"title="A quoi sert la méthode and_then ?">A quoi sert la méthode and_then ?</link>
1591
1592
</element>
1592
-
<element>
1593
-
<linkhref="#LII-D-10"title="A quoi sert la macro try! ?">A quoi sert la macro try! ?</link>
1594
-
</element>
1593
+
<element><linkhref="#LII-D-10"title="A quoi sert la macro try! ?">A quoi sert la macro try! ?</link> <imagesrc="./images/WIP.gif"/></element>
1595
1594
<element>
1596
1595
<linkhref="#LII-D-11"title="Comment utiliser la macro assert! ?">Comment utiliser la macro assert! ?</link>
<title>A quoi sert la macro panic ! ?</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 <inlinelangage="rust">panic!</inline> pourrait être comparée aux exceptions <linkhref="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>
1637
1640
<codedissimulable="1"langage="java"showLines="1"startLine="1"titre="Exemple de dead code">public class MyClass
<title>A quoi sert la méthode unwrap ?</title>
1660
-
<paragraph>La méthode unwrap() permet de récupérer la donnée contenue par son wrapper et de faire abstraction des « cas d'analyse » 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 <inlinelangage="rust">unwrap()</inline> permet de récupérer la donnée contenue par son wrapper et de faire abstraction des « cas d'analyse » avant de la délivrer.</paragraph>
1664
+
<paragraph>Autrement dit, la méthode <inlinelangage="rust">unwrap()</inline> délivre la donnée enveloppée si l'instance vaut <inlinelangage="rust">Some</inline>() ou <inlinelangage="rust">Ok</inline>(), sinon plante le programme si elle vaut <inlinelangage="rust">None</inline> ou <inlinelangage="rust">Err</inline>().</paragraph>
1662
1665
<codedissimulable="1"langage="rust"showLines="1"startLine="1"titre="Utilisation de la méthode unwrap()">fn main()
1663
1666
{
1664
1667
let foo : Option<String> = Some("ça passe!".to_string());
<title>A quoi sert la méthode unwrap_or ?</title>
1680
-
<paragraph>La méthode unwrap_or() fonctionne exactement comme la méthode originelle mais permet d'éviter de faire « paniquer » 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 <inlinelangage="rust">unwrap_or()</inline> fonctionne exactement comme la méthode originelle<noteBasPage>unwrap</noteBasPage> mais permet d'éviter de faire « paniquer » 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>
1681
1684
<codedissimulable="1"langage="rust"showLines="1"startLine="1"titre="Utilisation de la méthode unwrap_or()">fn main()
1682
1685
{
1683
1686
let foo : Option<String> = Some("ça passe!".to_string());
Pensez à isoler les appels de la méthode si vous ne souhaitez pas faire planter votre programme.
1691
1694
*/
1692
1695
}</code>
1696
+
<paragraph>Voir aussi :</paragraph>
1697
+
<paragraph>
1698
+
<linkhref="https://is.gd/gwInIj"target="_blank"title="Ouvrir un nouvel onglet">Tester l'exemple</link>
1699
+
</paragraph>
1693
1700
</section>
1694
1701
<sectionid="II-D-7">
1695
1702
<title>A quoi sert la méthode unwrap_or_else ?</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 <inlinelangage="rust">unwrap_or_else</inline> fonctionne exactement comme <inlinelangage="rust">unwrap_or</inline>, mais proposera de passer en paramètre une fonction à la place d'une simple donnée.</paragraph>
1697
1704
<rich-imgtexttype="warning">
1698
-
<paragraph>Attention, Option<T> et Result<T, E> l'implémentent toutes les deux, mais pas de la même manière.</paragraph>
1705
+
<paragraph>Attention, <inlinelangage="rust">Option<T></inline> et <inlinelangage="rust">Result<T, E></inline> l'implémentent toutes les deux, mais pas de la même manière.</paragraph>
1699
1706
<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>
1700
1707
</rich-imgtext>
1701
1708
<codedissimulable="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()
1712
1719
bar.unwrap_or_else(|| { return "On évite la casse !".to_string(); });
1713
1720
println!("{}", bing.unwrap_or_else(bang));
1714
1721
}</code>
1715
-
<paragraph><b>Note </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 </b>: le paramètre que reçoit la fonction <inlinelangage="rust">bang</inline> n'est ni plus ni moins ce que vous avez renseigné dans le contructeur de l'instance <inlinelangage="rust">Err</inline>() <inlinelangage="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>
1716
1723
</section>
1717
1724
<sectionid="II-D-8">
1718
1725
<title>A quoi sert la méthode map ?</title>
@@ -1817,7 +1824,7 @@ fn main() -> ()
1817
1824
<paragraph><inlinelangage="rust">debug_assert!</inline> ainsi que ses dérivés (<inlinelangage="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>
1818
1825
<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>
1819
1826
<rich-imgtexttype="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>
1821
1828
</rich-imgtext>
1822
1829
<paragraph>
1823
1830
<b>Comment l'utiliser ?</b>
@@ -1879,6 +1886,8 @@ fn main()
1879
1886
<paragraph>
1880
1887
<linkhref="https://is.gd/kof5ew"langue="Src"target="_blank"title="Ouvrir un nouvel onglet">Le résultat de cet exemple</link>
1881
1888
</paragraph>
1889
+
<paragraph>Qu'est-ce que la structure Option<T> ?</paragraph>
1890
+
<paragraph>Comment utiliser la structure Option<T> ?</paragraph>
1882
1891
</section>
1883
1892
</section>
1884
1893
<sectionid="II-E">
@@ -1900,7 +1909,7 @@ fn main()
1900
1909
</rich-imgtext>
1901
1910
</section>
1902
1911
<sectionid="II-H">
1903
-
<title>Erreurs, difficultés</title>
1912
+
<title>Trucs & astuces</title>
1904
1913
<sectionid="II-H-1">
1905
1914
<title>Que puis-je trouver dans cette section ?</title>
1906
1915
<paragraph>Vous pourrez retrouver des « trucs et astuces » pour résoudre un problème plus ou moins commun et complexe.</paragraph>
0 commit comments