IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

La beauté des fermetures [Tutoriel]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut La beauté des fermetures
    Bonjour,

    Cette discussion est destinée à recueillir vos commentaires sur l'article La beauté des fermetures (traduction de l'article The Beauty of Closures de Jon Skeet).

    Un de ces jours, j’aimerais écrire sur mon blog à propos des diverses propositions pour les fermetures en Java 7. Cependant, quand j’ai commencé à écrire ce billet, j’ai réalisé qu’il était difficile de commencer sans une introduction aux fermetures. Au fil du temps, cette introduction est devenue tellement longue que j’ai eu peur de perdre la plupart de mes lecteurs avant d’arriver à la partie concernant Java 7. Puisque le chapitre 5 du livre (C# in Depth, NdT) traite essentiellement des méthodes anonymes et de comment elles apportent les fermetures à C#, il m’a semblé approprié d’écrire cet article ici (sur le site csharpindepth.com, NdT).

    La plupart des articles concernant les fermetures sont écrits en termes de langages fonctionnels, car ceux-ci tendent à mieux les supporter. Cependant, c’est aussi précisément pourquoi il est utile d’écrire un article qui traite de comment elles apparaissent dans des langages orientés objet plus traditionnels. Il y a des chances que si vous programmez dans un langage fonctionnel, vous les connaissez déjà. Cet article traitera de C# (1, 2 et 3) et de Java (avant la version 7).

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Bonjour,
    Il aurait été pertinent de décliner les exemples avec Java 8 puisque les lambda arrivent dans cette version qui est pour mars ou avril.

    Sinon bon article, merci.
    Bonne journée

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par tralloc Voir le message
    Il aurait été pertinent de décliner les exemples avec Java 8 puisque les lambda arrivent dans cette version qui est pour mars ou avril.
    Certes... mais je me suis contenté de traduire, je ne pouvais pas ajouter des choses que l'auteur n'avait pas écrites

    L'article a été écrit il y a au moins 2 ans il me semble, donc à l'époque les lambdas de Java 8 n'étaient pas encore finalisées...

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Ok, c'est bien dommage.
    Mais si tu as du courage pour le faire, tu peux rajouter quelque chose en disant que c'est un ajout de ta part. Ca se fait, non ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par tralloc Voir le message
    Mais si tu as du courage pour le faire, tu peux rajouter quelque chose en disant que c'est un ajout de ta part. Ca se fait, non ?
    Oui je suppose que ça pourrait se faire, en tant que "note du traducteur"... mais d'un autre côté, je ne connais pas très bien Java, donc je risque de dire des bêtises

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Par défaut
    Dans le point 5 " Comparaison des stratégies de capture : puissance contre complexité", l'auteur indique qu'il n'est pas possible en java d'avoir facilement le comportement attendu par défaut en C#, à savoir, d'effectuer plusieurs fois l'action sur une même variable (et non sa valeur).

    Dans le cas présenté, afficher 10 fois la valeur final du compteur: "10".

    Le comportement similaire en java est certes un peux plus complexe, mais il est farfelu de proposer une solution basé sur des tableau pour capturer les références...

    Le constat est simple: en java, la référence doit être "final". La solution, et donc de simplement créer un objet "final" qui va encapsuler l'objet à manipuler.

    Pour un compteur, AtomicInteger remplis ce rôle (même s'il n'est pas du tout prévu pour ça à la base).

    Le code est donc le suivant, et fonctionne comme le cas initial présenté en C#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // Construire d’abord une liste d’actions
    List<Runnable> actions = new ArrayList<Runnable>();
     
    for (final AtomicInteger counter = new AtomicInteger(0); counter.get() < 10; counter.getAndIncrement()) {
     
         actions.add(new Runnable() {
              public void run() {
                   System.out.println(counter.get());
              }
         });
    }
     
    // Puis les exécuter
    for (Runnable action : actions) {
         action.run();
    }

Discussions similaires

  1. Utilisation des fermetures
    Par Oscar Hiboux dans le forum Langage
    Réponses: 7
    Dernier message: 16/02/2010, 16h24
  2. [Internals] Que pensez-vous des Fermetures en PHP ?
    Par Yogui dans le forum Langage
    Réponses: 22
    Dernier message: 14/02/2010, 06h49
  3. Gestion des fermetures fournisseurs
    Par bapt32 dans le forum SAP
    Réponses: 0
    Dernier message: 16/12/2009, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo