• [^] # Re: Nouveau langage

    Posté par (site web personnel) . En réponse à la dépêche C++17 branche à la compilation (`if constexpr`). Évalué à 6.

    Par exemple, la fonction suivante ne fonctionne que pour les structures (classes) fournissant des fonctions membres recupere_x() et recupere_y().

    template <typename T>
    auto calcule (T objet)
    {
     auto x = objet.recupere_x();
     auto y = objet.recupere_y();
     return (x+x) - (y*y);
    }

    Supposons que nous devions utiliser deux bibliothèques développées par deux entités différentes :

    • Un bibliothèque fournit une structure (classe) qui ne possède pas les fonctions membres recupere_x() et recupere_y() ;
    • La seconde bibliothèque fournit la fonction calcule.

    On n'a pas la possibilité de modifier aucune des deux bibliothèques.
    Comment faire pour passer la structure (classe) à la fonction calcule ?


    Voyons maintenant, une implémentation de la fonction calcule utilisant cette fois-ci les fonctions libres :

    template <typename T>
    auto calcule (T objet)
    {
     auto x = recupere_x(objet);
     auto y = recupere_y(objet);
     return (x+x) - (y*y);
    }

    Et c'est beaucoup plus facile de passer la structure (classe) à la fonction calcule(). Deux possibilités :

    • les fonctions libres recupere_x() et recupere_y() sont déjà disponibles dans une bibliothèque ;
    • ou bien nous devons les implémenter, ce qui est bien plus facile que l'exercice précédent.

    C'est dans ce second paradigme que sont conçus beaucoup de langages récents comme Rust et Go.
    Cela permet naturellement de respecter le principe ouvert/fermé.


    Prenons un exemple dans un vieux langage... allez prenons Python qui doit avoir une trentaine d'années, et étudions sa fonction libre len() :

    str = 'test'
    r = len(str) # retourne 4

    Certains objets implémentent la fonction membre __len__() mais la convention est de passer par la fonction libre len().

    Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)