Functors quand devrais-je les utiliser?

Je n'arrive pas à les envelopper ma tête autour d'eux.

Que je comprends que c'est l'ajout dynamique de la logique à une classe. Sont les classes dans le cadre préparé pour cela?

Pourquoi devrais-je étendre la classe et ajouter les fonctionnalités de l'extension. Je voudrais être accessible partout dans le monde et autant que je sache, beaucoup plus facile à entretenir.

J'ai Lu il y a 4 types functor:

Comparer
Fermeture
Prédicat
Transformateur

Nous devrions probablement traiter chacun d'entre eux.

p.s. est-il quelque chose de semblable dans vb?

Je peux donc en l'état je pense que les expressions lambda sont des foncteurs. Cette opération efface les choses pour moi un peu 🙂 (hehe)

  • Les expressions Lambda sont les foncteurs?
  • Les fonctions anonymes sont les foncteurs?

Mais j'ai posé cette question parce que j'ai couru dans un autre type de fucntors notamment ceux-ci:

delegate void FunctorDelegate(int value);
class Addition {
    FunctorDelegate _delegate;

    public Addition AddDelegate(FunctorDelegate deleg) {
        _delegate += deleg;
        return this;
    }
    public int AddAllElements(IList< int> list) {
        int runningTotal = 0;
        foreach( int value in list) {
            runningTotal += value;
            _delegate(value);
        }
        return runningTotal;
    }
}

Puis en l'appelant avec ceci:

 int runningTotal = new Addition()
     .AddDelegate(new FunctorDelegate(
                     delegate(int value) {
                         if ((value % 2) == 1) {
                             runningOddTotal += value;
                         }
                     }))
    .AddDelegate(new FunctorDelegate(
                     delegate(int value) {
                         if ((value % 2) == 0) {
                             runningEvenTotal += value;
                         }
                     }))
    .AddAllElements(list);

Donc pas de fantaisie lambda style de choses.

Maintenant, j'ai cet exemple mais il n'est pas clair du tout pourquoi c'est une "bonne" solution.

Sont délégués (foncteurs) ont utilisé les expressions lambda ou les méthodes anonymes "dans la plupart des cas" juste là comme un raccourci pour le programmeur? Il y a aussi loin que je peux voir quelques cas seulement où ils sont en fait le choix préféré pour un problème.

source d'informationauteur albertjan