Auteur Sujet: Programmation : les closures  (Lu 34700 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1084
  • HO avec DCC++
    • Voir le profil
Re : Programmation : les closures
« Réponse #15 le: janvier 13, 2019, 03:49:51 pm »
Non car c'est plus qu'un pointeur de fonction, notamment en ce qui concerne la capture  ;)

Je suis content que tu parles effectivement de la capture car je pense que l'on ne peut pas bien comprendre et dans tous les cas, pas tirer totalement profit des closures si on n'explique pas la capture et les types de captures.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Programmation : les closures
« Réponse #16 le: janvier 13, 2019, 08:23:17 pm »
Pour l'usage d'un auto, qui s'apparente de très près au 'var' du C#, il a été convenu à mon boulot qu'il était permis uniquement si le type est inscrit en clair sur la ligne, comme un cast ou une allocation par 'new' :

auto c = (int) a;  // forcément un entier...
auto obj = new Toto(); // Forcément un Toto...

les autres écritures qui ne disent par leur type sont interdites :

auto x = 4; // Ne dit rien sur le type...
auto ret = GetValue(); // on ne sait pas ce qu'on récupère.

En C# toujours, l'outil externe Resharper que nous utilisons et qui améliore la gestion du langage et des erreurs est réglé pour signaler comme une erreur tout abus de 'var'. C'est dommage de ne pas pouvoir en faire autant avec Visual ou Gcc.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1715
    • Voir le profil
Re : Programmation : les closures
« Réponse #17 le: janvier 14, 2019, 08:24:58 am »
Mon point de vue est qu’auto à été introduit dans le langage pour éviter des déclarations à la fois verbeuses et redondantes.

Employer auto pour déclarer un entier n’a pas de sens car on perd de l’expressivité sans être moins verbeux.

Donc ça trouve sa place pour allouer dynamiquement un objet :

auto obj = new Truc();

Car obj est a coup sûr un Truc* et c’est moins verbeux que

Truc *obj = new Truc();

Pour les closures comme on l’a déjà dit.

Et écrire :

auto a = (int)c;

C’est un truc de programmeur geek car c’est plus verbeux et moins clair que

int a = c;

 ;D
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Programmation : les closures
« Réponse #18 le: janvier 14, 2019, 08:56:49 am »
Effectivement, ça s'applique plutôt dans Accessories sur une déclaration du type :

auto items = new ACCSCHAINEDLIST<GroupStateItem>();

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Programmation : les closures
« Réponse #19 le: janvier 16, 2019, 05:58:48 pm »
Bonjour à tous,

Merci Jean-Luc d'avoir lancé ce post.
J'utilise régulièrement auto dans le boucles, mais il est vrai que pour certaines déclarations dynamiques d'objets , cela peut allèger le code. Je vais m'empresser de le mettre en application.

J'ai découvert les lamda il y a peu et notament dans du code appliqué au serveur avec l'ESP32 ou cela est un peu hermétique au départ mais structure bien le code.
server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/plain", "Hello World");
});