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

JavaScript Discussion :

Nombre d'arguments variable


Sujet :

JavaScript

  1. #1
    Membre r�gulier
    Inscrit en
    Janvier 2013
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par d�faut Nombre d'arguments variable
    Bonjour � tous,
    J'ai un tp � faire dans le cadre de mes �tudes en informatique.
    Ci dessous, le code JavaScript.
    J'ai implementer la function sub() sans trop de soucis, en revanche je doit modifier la fonction adder afin qu'elle acceptee un nombre variable d'argument tel que :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    adder()(0); // 0
    adder()(1); // 0
    adder(mult(2))(1); // 2
    adder(mult(2), mult(2))(1); // 4
    adder(mult(2), mult(2), mult(2))(1); // 6
    adder(mult(2), sub(2), mult(2))(1); // 5
    Mon professeur m'indique d'utiliser :
    -->
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    var args = Array.prototype.slice.call(arguments);
    [1,2,3].forEach(function(val){console.log(val);});
    Mais je ne comprend pas trop.

    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
    function adder(l,r){
      return function(v){
        return l(v) + r(v);
      }
    }
     
    function mult(v){
      return function(e){
        return v*e;
      }
    }
    function sub(x,y)
    {
            return x-y;
    }
    console.log(adder(mult(2), mult(4))(2));
    console.log(sub(0,0));
    console.log(sub(2,1));
    console.log(sub(2,2));
    console.log(sub(2,4));
    Pouvez vous m'aider s'il vous plait ?
    Merci d'avance.

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Ton prof t'a donn� tout ce dont tu as besoin
    La premi�re ligne r�cup�re les arguments pass�s dans la fonction en cours sous forme d'Array.
    La seconde montre comment ex�cuter facilement une fonction sur chaque �l�ment d'un Array. Bien qu'une boucle for fait tout aussi bien dans ton cas.

  3. #3
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Je ne suis pas fan du prototype ...
    personnellement quand j'ai besoin de passer un nombre d'arguments variable je passe un json ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  4. #4
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    fan du prototype ? tu veux dire caster les arguments en Array ? Je ne vois quel est le probl�me avec �a. Ca me parait tout � fait appropri� pour le probl�me de la calculatrice en notation polonaise.

  5. #5
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    je n'aime pas surcharger, j'ai eu trop de surprises pars le pass�

    j'ai juste pris l'habitude des passer un json en param�tre ce qui me parait beaucoup plus souple et moins contraignant et ne g�n�re aucune surprise par la suite
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  6. #6
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Mais ici on ne surcharge rien du tout. On appelle simplement la fonction slice issue du prototype d'Array pour obtenir les arguments de la fonction sous la forme d'une Array. C'est quelque-chose de tout � fait courant

  7. #7
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut

    en effet pas de surcharge... c'est juste prototype qui me colle des boutons ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  8. #8
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var args = [].slice.call(arguments);
    Ca va mieux

  9. #9
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    oui ^^ merci
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  10. #10
    Membre r�gulier
    Inscrit en
    Janvier 2013
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par d�faut
    Je ne comprend vraiment pas comment faire
    Je met le tableau ici, en placant arguments en parametre de la fonction, est-ce bon ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    function adder(arguments){
    var args = Array.prototype.slice.call(arguments);
     
    	return function(v){
        return l(v) + r(v);
    }

  11. #11
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    arguments contient la liste des arguments pass� en fonction, il est inutile de l'indiquer dans la d�claration. Peut-�tre que ceci vous mettra sur la voie :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function adder(){
    var args = Array.prototype.slice.call(arguments);
     
    for(var a=0; a<args.length; a++){
          alert(args[a]);
    }
     
    }
     
    adder(1,2,3);

  12. #12
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Moi aussi le prototype m'ennuie, mais pour une autre raison. �a me d�range d'avoir recours � la m�thode slice alors qu'au final on ne slice pas le tableau.

    Les navigateurs pas trop vieux proposent des m�thodes g�n�riques pour Array, notamment une version g�n�rique de forEach. �a fait du code plus court :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    function adder() {Array.forEach(arguments, function(arg) {});
      …
    }
    La m�thode reduce est � mon go�t la plus �l�gante pour r�soudre ce genre de probl�me, mais elle est peut-�tre un peu difficile � comprendre au d�but. Il y a aussi map qui peut �tre int�ressante.
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  13. #13
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Oui c'est s�r que Array.reduce est plus appropri� ici, il suffit d'�crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function adder() {
      return [].reduce.call(arguments, function(res, arg){ return res+arg; });    
    }
    Je pense que le prof a parl� du slice car c'est un moyen g�n�rique de r�cup�rer les arguments sous forme de vraie Array ; le genre de trucs qu'on peut r�utiliser partout sans risques.

  14. #14
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    reduce aussi a une version g�n�rique :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function adder() {
      return Array.reduce(arguments, function(res, arg){ return res + arg; });    
    }
    Dans l'enseignement on s'en fout que �a marche sous IE4, l'important c'est que l'�l�ve comprenne. Et quitte � enseigner une technologie qui �volue rapidement telle que JavaScript, autant enseigner les pratiques modernes.

    Tiens tant qu'� faire, on a les fonctions lambda :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    function adder() Array.reduce(arguments, function(res, arg) res + arg);
    Ou m�me carr�ment les fonctions arrow du futur standard ES6 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    function adder() => Array.reduce(arguments, (res, arg) => res + arg);
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  15. #15
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Citation Envoy� par Watilin Voir le message
    Dans l'enseignement on s'en fout que �a marche sous IE4, l'important c'est que l'�l�ve comprenne. Et quitte � enseigner une technologie qui �volue rapidement telle que JavaScript, autant enseigner les pratiques modernes.
    Oui mais non. Assurer le support des anciens navigateurs, �a fait partie de l'enseignement. Je n'ai pas trop envie de voir d�barquer un stagiaire dans ma bo�te qui commence � coder en ES6 sans savoir ce qu'est un polyfill. A ce niveau l� de l'enseignement, on pr�pare l'�l�ve au monde de l'entreprise. Et dans le monde de l'entreprise, il n'y a pas beaucoup de monde qui peut se permettre le luxe de l�cher le support d'IE8.

    Par ailleurs, les versions g�n�riques des m�thodes d'Array ne font pas partie des normes EcmaScript5 (voir https://developer.mozilla.org/en-US/...eneric_methods).

  16. #16
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par d�faut
    Et pour l'onanisme intellectuel, cette technique a un nom : le Currying (Curryfication en fran�ais)

Discussions similaires

  1. Un script shell avec nombre d'argument variable
    Par lastrecrue dans le forum Linux
    R�ponses: 1
    Dernier message: 28/05/2006, 11h35
  2. m�thodes avec nombres d'arguments variable
    Par spynux dans le forum Langage
    R�ponses: 2
    Dernier message: 26/05/2006, 13h51
  3. R�ponses: 4
    Dernier message: 31/10/2005, 17h48
  4. Macros et nombre d'arguments variable
    Par kaisse dans le forum C
    R�ponses: 7
    Dernier message: 28/07/2005, 10h10
  5. Nombre d'arguments variable
    Par gege2061 dans le forum C
    R�ponses: 7
    Dernier message: 05/08/2004, 15h43

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