J'ai beau lire et relire la littérature sur les closure, je comprends vraimant pas ce que ça apporte de miraculeux.
C'est une fonction qui peut être exécutée dans un contexte. Ouai, cool, mais je vois pas la différence avec une fonction qui prend un argument. Ah oui, on peut stoker la fonction. Mais en dehors du pascal, vous connaissez beaucoup de langages où on ne peut pas stocker une fonction ?
En lisant toujours, il semblerait que la force des "closure" soit de les associer avec un contexte persistent, et que l'ensemble fasse un objet plutôt intelligent. Bon, je peux imaginer que c'est pratique.
Si j'essaye de formaliser ça à ma façon, ça donnerait :
# on fait une closure en python
def get_threshold_tester( threshold ):
....def threshold_tester( a ):
........return a >= threshold
....return threshold_tester
Bon, je ressens pas un gain énorme. C'est certes plus concis avec une closure, mais je sens que le miracle de la programmation avec closure va continuer à m'échapper.
[^] # Re: Block ou closure ?
Posté par Philippe F (site web personnel) . En réponse au journal Où l'on en apprend un peu plus sur Java 7. Évalué à 4.
C'est une fonction qui peut être exécutée dans un contexte. Ouai, cool, mais je vois pas la différence avec une fonction qui prend un argument. Ah oui, on peut stoker la fonction. Mais en dehors du pascal, vous connaissez beaucoup de langages où on ne peut pas stocker une fonction ?
En lisant toujours, il semblerait que la force des "closure" soit de les associer avec un contexte persistent, et que l'ensemble fasse un objet plutôt intelligent. Bon, je peux imaginer que c'est pratique.
Si j'essaye de formaliser ça à ma façon, ça donnerait :
# on fait une closure en python
def get_threshold_tester( threshold ):
....def threshold_tester( a ):
........return a >= threshold
....return threshold_tester
f = get_threshold_tester( 10 )
f( 11 ) -> True
f( 9 ) -> False
Et ça, ça remplacerait avantageusement :
# on fait une closure en python mais on oublie que python sait faire des closure simplement
class ThresholdTester:
....def __init__( self, threshold ):
........self.threshold = threshold
....def test_threshold( a ):
........return a >= self.threshold
v = ThresholdTester( 10 )
v.test_threshold( 11 ) -> True
v.test_threshold( 9 ) -> False
Bon, je ressens pas un gain énorme. C'est certes plus concis avec une closure, mais je sens que le miracle de la programmation avec closure va continuer à m'échapper.