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 :

L'Union Européenne finance le langage Scala


Sujet :

Scala Java

  1. #41
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par Yo Eight Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    values.foldLeft(0)(_+_)
    Cette simple ligne te renvoie la somme de tous les Int de la liste. En Java, c'est beaucoup plus verbeuxexplicite pour faire une si petite chose
    C'est une syntaxe yield-like de Ruby (même si je pense que c'est pomper d'un autre langage) ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  2. #42
    Membre averti
    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
    Points : 307
    Points
    307
    Par défaut
    On peut faire plus explicite tout en étant concis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    values.foldLeft(0)((result: Int, current: Int) => result + current)
    Le fait d'être verbeux n'apporte pas tout le temps de la clarté. Très souvent en Scala, le code colle de très près à l'algo, il y a très peu de code de contexte comme la déclaration de variables temporaires. Après à etre trop concis, on en perd de la clarté, je suis d'accord.

  3. #43
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    En faite c'est surtout que je trouve pas super explicite. Ca renvoie quoi ? Une collection ? Un itérateur ?

    Et j'aurais préféré un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    collection.join(operation)
    où opération prend un élément du type de la collection en paramètre et renvoie un type quelconque. Le résultat étant du type résultant de l'opération.

    Ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    collection.apply(operation)
    dans ce cas operation prend toujours le même paramètre mais ne renvoie rien.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #44
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nemek Voir le message
    En faite c'est surtout que je trouve pas super explicite. Ca renvoie quoi ? Une collection ? Un itérateur ?

    Et j'aurais préféré un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    collection.join(operation)
    où opération prend un élément du type de la collection en paramètre et renvoie un type quelconque. Le résultat étant du type résultant de l'opération.

    Ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    collection.apply(operation)
    dans ce cas operation prend toujours le même paramètre mais ne renvoie rien.
    L'opérateur fold est un opérateur classique sur les collections dans les langages fonctionnels. Ensuite pour comprendre ce que retourne il faut connaître un peu scala. En gros ça retourne une fonction qui accepte un paramètre de type fonction et retourne un entier (dans ce cas précis). Scala ici n'a rien inventé, mais a juste les opérateurs fonctionnels classiques tel que map, filter, foreach, foldLeft, foldRight… qui sont ma foi très pratiques !
    Il faut juste se faire à la logique fonctionnelle, mais c'est très agréable et pratique

  5. #45
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Ok ! J'avais fait un peu d'Haskell mais rien de bien méchant. Je n'avais jamais utilisé "fold".

    Je suppose que 0 c'est le premier indice et "left" indique le sens de parcours ? On ne peut donc que renvoyer un int ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #46
    Membre averti
    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
    Points : 307
    Points
    307
    Par défaut
    0 c'est la valeur initial. A chaque appel, on prend le résultat de l'appel précédent

    Cela dit c'est une méthode générique dont tu peux renvoyer ce que tu veux. Il se base sur le type du premier lot de paramètres (le(0))

    Voici sa signature:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def foldLeft[B](z: B)(f: (B, A) => B): B
    A étant le type d'objet contenu dans la liste

  7. #47
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par Yo Eight Voir le message
    si je considère values comme une liste de Int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    values.foldLeft(0)(_+_)
    Cette simple ligne te renvoie la somme de tous les Int de la liste. En Java, c'est beaucoup plus verbeux pour faire une si petite chose
    Et comme ça, si tu veux le produit, ça te permet de dessiner un cul, ni vu ni connu, dans ton code !

  8. #48
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par Yo Eight Voir le message
    0 c'est la valeur initial. A chaque appel, on prend le résultat de l'appel précédent

    Cela dit c'est une méthode générique dont tu peux renvoyer ce que tu veux. Il se base sur le type du premier lot de paramètres (le(0))

    Voici sa signature:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def foldLeft[B](z: B)(f: (B, A) => B): B
    A étant le type d'objet contenu dans la liste
    Ok, c'est bien l'idée que je me faisais via ma méthode "join". Même si ma signature était pourrie
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. L'Union Européenne finance le langage Scala
    Par Idelways dans le forum Actualités
    Réponses: 19
    Dernier message: 21/01/2011, 12h48
  2. Réponses: 10
    Dernier message: 15/12/2010, 15h59
  3. Discussion: langage Scala
    Par Thorna dans le forum Scala
    Réponses: 3
    Dernier message: 10/10/2009, 10h58
  4. Connaissez-vous Le langage SCALA ?
    Par M.a.n.u. dans le forum La taverne du Club : Humour et divers
    Réponses: 1
    Dernier message: 21/05/2008, 13h39

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