t + … (fold expression)

Je sens que l’on va encore entendre des gens se plaindre des nouvelles syntaxes de la future norme du C++. 🙂

Pour calculer la moyenne d’une liste de valeur, il sera par exemple possible d’écrire :

#include <iostream>

template<class ... T>
auto avg(T ... t) {
    return (t + ...) / sizeof...(t);
}

int main() {
    std::cout << avg(1,2,3.0,4.5) << std::endl;
}

La syntaxe (t + …) est une expression fold, qui provient de la programmation fonctionnelle et qui sera introduit dans le C++17.

Pour les détails, Jason Tuner a sorti une (première) vidéo sur fold : C++ Weekly – Ep 20 C++17’s Fold Expressions – Introduction. Et pour les détails : fold expression (cppreference.com).

NB : Ne soyez pas surpris si je parle souvent des vidéos de Jason Turner. Ses vidéos sur les futures fonctionnalités du C++17 sont rapides à regarder, très pragmatiques et sans équivalent à ma connaissance.

Publicités

3 commentaires sur « t + … (fold expression) »

  1. Salut,
    Je vais finir par prier que personne n’utilise les nouvelles syntaxes.
    Le problème avec une syntaxe est que c’est très très long pour aller rechercher sa documentation (impossible de faire une recherche google par exemple) ; contrairement à une fonction (touche F1 dans qtcreator par exemple).
    Tant que ce problème ne sera pas résolut, les nouvelles syntaxes ne feront que dégradé le langage à mon goût.
    @+

  2. Dans l’absolue, oui, tu as raison. Il est facile de trouver la documentation sur cppreference, mais uniquement si on connait deja le nom de cette syntaxe.
    Mais est-ce que tu interdirais par exemple l’utilisation de « & » uniquement parce qu’il n’est pas possible de trouver directement en appuyant sur F1 que c’est une référence ?

    L’apprentissage d’un langage ou la mise à jour de ses connaissances ne peut pas passer uniquement par l’utilisation de la documentation (ou tout au moins, pas uniquement avec un simple F1. Si tu ne sais pas que la move semantic a été ajoutée au C++11, tu ne penseras pas à faire un F1 sur le constructeur de std::vector pour voir que de nouveaux constructeurs ont été ajoutés).

    Et c’est une problématique plus large, qui concerne tous les langages et toutes les mises à jour d’un langage. Faut-il s’interdire toutes mises à jour d’un langage ?
    Si on s’interdit toutes nouvelles syntaxes, comment peut-on les apprendre ? On attend que tout le monde connaisse une syntaxe avant de l’utiliser ?

    1. On se sent effectivement sacrément démunit lorsque l’on tombe sur une syntaxe inconnue en c++.
      Seul solution, passer un temps fou à parser cppreference.

      Après bien-sur que l’on ne doit pas s’interdire toutes mises à jour.
      Mais on ne peut pas nier que cela ajoute une certaine complexité.
      Et c’est rarement la complexité qui fait le succès d’un produit.

      Pour moi, la complexité n’est tolérable que si elle est documenté avec facilité d’accès.
      Car je peux t’assurer qu’à chaque fois que j’oublie de correctement documenter un bout de code complexe, je finis systématiquement par m’en mordre les doigts un jours ou l’autre. Alors pourquoi cela serait différent avec la syntaxe ?

      D’ailleurs pour moi, la notion de complexité n’est pas seulement liées à l’application de certaines syntaxes, mais aussi à la quantité de syntaxe disponible. (c’est très analogue à la complexité de la grammaire du français)

      Maintenant imagine un gros projet c++ dans lequel l’IDE (ou autre) te prive de pouvoir sauter d’une fonction à une autres, voir pire puisqu’il ne te permet même pas de pouvoir faire une recherche par mot clef ! ça serait l’horreur ! Et bien c’est ce qui ce passe avec la syntaxe du c++.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s