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

Scala Java Discussion :

Passage de fonctions comme paramètres


Sujet :

Scala Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut Passage de fonctions comme paramètres
    Bonjour,

    J'ai un petit problème de compréhension pour le cas suivant:

    Si j'ai : val f: (Int => String) = (x => "Dude: "+x) pourquoi ne je ne peux pas faire la chose suivante? val f: (Int => String) = ((x+1) => "Dude: "+x); (x + 1) est tout de même un Int....


    Je continue...... et je déclare def w42(f: Int => String) = f(42) ok w42(f) génére bien ==> Dude: 42

    def fm(i: Int) = "fm "+i Et là je ne comprend pas......

    w42((i: Int) => fm(i)) donne comme résultat "fm 42"

    Je vois bien que Int => String et donné par Int ==> fm(i) donc int ==> (Int => String) Mais ou est donc Dude??????

    Merci par avance.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par Snyper Voir le message
    Si j'ai : val f: (Int => String) = (x => "Dude: "+x) pourquoi ne je ne peux pas faire la chose suivante? val f: (Int => String) = ((x+1) => "Dude: "+x); (x + 1) est tout de même un Int....
    Ce qu'il y a avant le '=>' est le paramètre de ta fonction. Ainsi :
    correspondrait à la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f(x: Int) = {
      "Dude: " + x
    }
    Aussi écrire reviendrait à écrire la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f(x + 1: Int) = {
      "Dude: " + x
    }
    Ce qui n'est évidemment pas correct. Tu peux en revanche écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x => "Dude: " + (x + 1)

    Citation Envoyé par Snyper Voir le message
    Je continue...... et je déclare def w42(f: Int => String) = f(42) ok w42(f) génére bien ==> Dude: 42

    def fm(i: Int) = "fm "+i Et là je ne comprend pas......

    w42((i: Int) => fm(i)) donne comme résultat "fm 42"

    Je vois bien que Int => String et donné par Int ==> fm(i) donc int ==> (Int => String) Mais ou est donc Dude??????

    Merci par avance.
    Je pense que le fait d'avoir ta première fonction appelée f t'embrouille avec le paramètre f de la fonction w42.
    Reprenons ton code et renommons la première fonction "dude"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val dude: (Int => String) = (x => "Dude: " + x)
    ensuite la fonction "fm"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val fm(i: Int) = "fm "+i
    Ces deux fonctions (bien que déclarées différement) attendent toutes les deux un entier pour renvoyer une chaîne de caractère (type Int => String).

    Maintenant la fonction w42 qui attend en paramètre une fonction de type Int => String pour lui passer 42 et renvoyer le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def w42(f: Int => String) = f(42)
    Donc si on passe la fonction dude en paramètre w42(dude) cela va appelé dude(42) et afficher "Dude: 42"

    Maintenant décomposons ton code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w42( (i: Int) => fm(i) )
    Tu appeles w42 en lui passant en paramètre (i: Int) => fm(i). Ce code crée dynamiquement une fonction qui attend un entier et renvoi le résultat de fm(i).

    En gros ça revient à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def uneFonction(i: Int): String = {
      fm(i)
    }
     
    w42(uneFonction)
    Donc l'exécution donne :
    w42(uneFonction) uneFonction(42) fm(42) "fm 42"

    Tu peux noter que la fonction créée dynamiquement n'ajoute rien et l'expression peut être simplifiée à w42(fm)
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Je vous remercie pour cette super explication! je vais essayer de comprendre et si j’absorbe bien... je passe en statut résolu.


    Merci encore une fois!


    Cordialement,

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    J'ai compris

    Je pensais que le paramètre dans pouvait être vu lui même comme un paramètre(en passage de fonction).

    Et oui... je me suis 'embrouiller avec cette petite histoire paramètre f de la fonction w42 et d'avoir appeler ma première fonction f.

    Je me prépare pour le cour Java


    Merci.

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    J'avoue qu'il faut un peu s'habituer à ces notations, surtout qu'il y a pas mal de notations différentes pour la même chose. J'ai également commencé scala récemment et c'est un peu la découverte de la programmation fonctionnelle ^^ .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passer le nom d'une fonction comme paramètre d'une autre fonction?
    Par med_alpa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/03/2010, 12h57
  2. Passage de fonction en paramètre d'une fonction.
    Par Berzerk_ dans le forum C++
    Réponses: 9
    Dernier message: 04/06/2007, 13h31
  3. Passage de fonction en paramètre
    Par optalix dans le forum Fortran
    Réponses: 3
    Dernier message: 01/02/2007, 12h31
  4. fonction comme paramètre d'une fonction
    Par velociraptor5679 dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2006, 18h19
  5. [VB]Passage de Fonction en paramètre (d'une autre fonction)
    Par Australia dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/03/2006, 18h55

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