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 :

Higher Order Function


Sujet :

Scala Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut Higher Order Function
    Bonjour à tous !
    Je me mets tout doucement au Scala (et par la même occasion à la programmation fonctionnelle), et j'ai un problème de compréhension au niveau de ce code :
    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
    17
    18
    19
    20
    21
     
    package highOrderFunction
     
    object Test 
    {
      def main(args : Array[String]) : Unit = {
        println(apply(layout, 10))
      }
     
      /**
     * @param f fonction qui ? 
     * @param v un type int
     * @return la fonction f appliquée à la valeur v. 
     */
      def apply(f: Int=>String, v: Int) = f(v)
     
      def layout[A](x: A) : String = {
        "[" +x.toString() + "]"
      }
     
    }
    Je ne comprend pas ce qui signifie le morceaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def apply(f: Int=>String, v: Int) = f(v)
    Ni ce que signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def layout[A](x: A) : String = {
    Ce que je pense avoir compris :
    La fonction apply prend en paramètre une fonction f et une valeur v.
    Elle applique ensuite la fonction à la valeur.

    Mais je ne comprends pas bien la syntaxe des éléments mis en gras.

    Quelqu'un pourrait-il m'expliquer ?

    Merci d'avance les amis

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 97
    Par défaut
    Salut,

    Code Scala : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Int => String

    indique une fonction qui prend en paramètre un Int et retourne un String

    Donc dans le cas de ta fonction apply, ça veut dire qu'elle s'attend que son paramètre f soit une fonction qui prend un Int en entrée et retourne un String

    D'ailleurs, une fonction d'ordre supérieure (aka Higher Order Function) est tout simplement une fonction qui prend en paramètre une fonction (ou plusieurs); comme ta fonction apply en somme

    Concernant:

    Code Scala : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def layout[A](x: A) : String = {

    c'est simplement la syntaxe Scala pour définir une type générique au niveau d'une fonction. En Java, ça correspondrait à:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public <A> String layout(A x) {

  3. #3
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Je rajouterais juste la précision suivante :

    est un type, tout comme Int et String. Int => String est le type des fonctions qui prennent en paramètre un Int et renvoient une String. Il peut aussi se noter (Int) => String, ce qui se généralise à plusieurs paramètres, par exemple, (Int, String) => String ainsi qu'à 0 paramètres, () => String.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    Waow !

    Ok ! Il me manquait effectivement un élément nécessaire pour que je comprenne ...

    Un grand merci à vous deux d'avoir pris le temps de répondre.

    Ps : Désolé du retard de réponse, période d'examen oblige !

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/07/2013, 17h19
  2. Réponses: 1
    Dernier message: 04/06/2009, 21h24
  3. ORDER BY dans un ordre inhabituel
    Par Riam dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/03/2003, 13h29
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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