• [^] # Re: Super !

    Posté par . En réponse au journal Port de taptempo en Rust. Évalué à 4.

    |s| s != "q"
    fonction anonyme de paramètre "s" (et de valeur s!=q). C’est juste plus compact et léger que les déclarations de fonctions habituelles :)
    Map est juste une fonction qui en attend une autre en paramètre. Le « map » classique s’applique sur une liste et applique la fonction sur tous les élément de la liste. C’est à dire qu’à partir d’une fonction d’un type A vers un type B ( A -> B ) map permet de former une fonction qui à partir d’une liste de A ([A] ou Liste A) retourne une liste de B : [A] -> B.

    Haskell, avec la notion de foncteur, a généralisé cette idée avec la notion de « foncteur » et fmap : un « truc » qui transforme une fonction de A -> B en une fonction « Truc A -> Truc B » est le fmap du foncteur truc ( https://hackage.haskell.org/package/base-4.10.1.0/docs/Control-Monad.html#v:fmap )
    Corrigez moi si je me trompe mais en l’occurrence « map » est le « fmap » du std::option de rust : il permet d’appliquer une fonction A -> B qui n’a pas à se soucier de si son A peut être null ou que sais-je en une fonction « option A -> option B » (« Truc A -> Truc B » avec Truc = option) qui va gérer d’elle même les cas « null » dans d’autres langage.

    Et effectivement, on peux trouver son code ici : https://doc.rust-lang.org/src/core/option.rs.html#402-407

    pubfn map<U,F: FnOnce(T)-> U>(self,f: F)-> Option<U>{
    matchself{
    Some(x)=>Some(f(x)),
    None=>None,
    }
    }

    f est une fonction qui renvoie un U et map(f) renvoie un option.

    L’idée du « Maybe » en haskell c’est que tu écris tes fonctions sans te soucier des cas d’erreurs ou des éventuels « null » quand rien ne peut arriver, comme si tu écrivais du code avec exceptions presque (ou des fonctions qui prennent un A et retournent un « peut être B » ( voir https://en.wikibooks.org/wiki/Haskell/Understanding_monads#Motivation:_Maybe ). Et le langage t’aides à les composer comme il faut avec des opérateurs et du sucre syntaxique éventuellement. C’est un cas particulier de « monade ». Dans un monade des opérations sont abstraites de la même manière que « fmap » est abstraite dans le début de mon commentaire.