Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage > Scala
Scala Forum d'entraide pour le langage Scala
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 07/04/2011, 13h57   #41
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 663
Points : 3 663
Citation:
Envoyé par Yo Eight Voir le message
Code :
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) ?
Nemek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 16h19   #42
Yo Eight
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 89
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 : 89
Points : 285
Points : 285
On peut faire plus explicite tout en étant concis

Code :
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.
Yo Eight est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 16h38   #43
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 663
Points : 3 663
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 :
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 :
collection.apply(operation)
dans ce cas operation prend toujours le même paramètre mais ne renvoie rien.
Nemek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 16h48   #44
George7
Membre Expert
 
Avatar de George7
 
Homme
Inscription : août 2006
Messages : 1 234
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : août 2006
Messages : 1 234
Points : 1 602
Points : 1 602
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 :
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 :
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
__________________
"Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
-- Mario Fusco

Pour vos développements Java : apprenez à utiliser la javadoc
George7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 16h55   #45
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 663
Points : 3 663
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 ?
Nemek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 18h43   #46
Yo Eight
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 89
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 : 89
Points : 285
Points : 285
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 :
1
2
 
def foldLeft[B](z: B)(f: (B, A) => B): B
A étant le type d'objet contenu dans la liste
Yo Eight est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 23h07   #47
TropMDR
Membre chevronné
 
Inscription : mars 2010
Messages : 281
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 281
Points : 752
Points : 752
Citation:
Envoyé par Yo Eight Voir le message
si je considère values comme une liste de Int

Code :
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 !
TropMDR est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/04/2011, 10h12   #48
Nemek
Modérateur
 
Avatar de Nemek
 
Homme Logan
Développeur Java
Inscription : août 2005
Messages : 1 695
Détails du profil
Informations personnelles :
Nom : Homme Logan
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur Java
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2005
Messages : 1 695
Points : 3 663
Points : 3 663
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 :
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
Nemek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h11.


 
 
 
 
Partenaires

Hébergement Web