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

Java Discussion :

Fonction en argument d'une fonction


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut Fonction en argument d'une fonction
    Bonjour à tous,
    Je voudrais savoir comment utiliser une fonction en argument d'u autre.

    Pour illustrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Illustration {
        public boolean positif(double x) {
             return (x > 0);
        }
        public double operation(double x, JeSaisPasQuoi func){
            If (func(x)){
                return (x + 10);
            } else {
                return (x - 10);
            }
        }
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    De manière générale :
    1. Il te faut créer une interface fonctionnelle JeSaisPasQuoi qui dispose d'une seule méthode ayant la meme signature que ta fonction a savoir ici une méthode qui prend un unique double en paramètre et retourne un boolean :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      private static interface JeSaisPasQuoi {
         boolean test(double x)
      }
    2. Tu peux après modifier le code de opération pour invoquer cette méthode test():
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      public double operation(double x, JeSaisPasQuoi func){
              If (func.test(x)){
      [...]
    3. Ensuite il te faut utiliser la référence de la fonction que tu veux invoquer lorsque tu appelles operation() :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      operation(double x, this::positif);


    De manière particulière, plutôt que de créer ta propre interface, tu peux utiliser a la place l'une des nombreuses interfaces fonctionnelles du JDK, par exemple java.util.function.Function<T, R> qui prend un T en paramètre et retourne un R comme résultat. Ici la méthode fonctionnelle de l'interface se nomme apply().


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public double operation(double x, Function<Double, Boolean> func){
            If (func.apply(x))
    [...]
     
     
    operation(double x, this::positif);
    Ça marchera également même si ta méthode utilise des littéraux dans sa signature alors que l'interface fonctionnelle, elle, utilise des objets dans sa signature. Évidement il y aura du boxing/unboxing des valeurs littéraux <-> objets durant le processus pour que cela fonctionne sans accros et cela marche puisqu'on utilise des types compatibles.

    On pourrait également utiliser l'interface java.util.function.Predicate<T> a place et sa méthode test() qui retourne un boolean. Bref, il existe une foultitude de solutions.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04
  2. Récupération d'arguments sur une fonction
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/09/2005, 09h17
  3. premier argument d'une fonction
    Par Ickou dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 14h17
  4. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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