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 maximum dans une fonction


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Nombre d'arguments maximum dans une fonction
    Bonjour à tous,

    j'aurai une question simple.

    Combien peut on mettre de arguments dans une fonction (entre parenthèses) s'il vous plait ?

    Exemple :

    fonctionG (varA_1,varB_1,varC_1,varA_2,varB_2,varC_2,varA_3,varB_3,varC_3,varA_4,varB_4,varC_4,varA_5,varB_5,varC_5,varA_6,varB_6,varC_6,varA_7,varB_7,,varC_7 ....... );

    J'aurai besoin de passer 90 arguments .

    Est ce totalement possible ?
    Est ce totalement stupide ? Pour quelle raison que je puisse comprendre ?
    Y a t-il d'autres subtilités a connaitre pour le faire ou contourner la limite des arguments?

    Pour explications, j'ai besoin que ces 90 arguments s'entremêlent pour au final afficher dans un graphe les 30 lignes ou 30 rectangles

    Merci pour vos retours.

    Guillaume

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    d'instinct, je dirais que tu n'es pas limité; mais le plus sage est de passer à ta fonction un tableau des éléments qui t'intéressent;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonsoir et merci a toi pour cette première réponse :

    En fait voila mon 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    function CalculM1(simul) 
    {
     
    	if (document.getElementById("planmontant_1_"+simul) != undefined && document.getElementById("planmontant_1_"+simul) != '0.00')
    	{
    		montant_immo_1=parseInt(document.getElementById("planmontant_1_"+simul).value);
    		taux_immo_1=document.getElementById("plantaux_1_"+simul).value;
    		duree_immo_1=parseInt(document.getElementById("planduree_1_"+simul).value);	if (duree_immo_1>1){duree_immo_1=duree_immo_1/12;}
    		dureediff_immo_1=parseInt(document.getElementById("plandureediff_1_"+simul).value);	if (dureediff_immo_1>1){dureediff_immo_1=dureediff_immo_1/12;}
    		chxdiff_immo_1=parseInt(document.getElementById("planchxdiff_1_"+simul).value);	if (chxdiff_immo_1>1){chxdiff_immo_1=chxdiff_immo_1/12;}
     
    		ass_immo_1_calc = document.getElementsByName("plancalcass_1_"+simul);for(var i = 0; i < ass_immo_1_calc.length; i++){if(ass_immo_1_calc[i].checked){ ass_immo_1_calc = ass_immo_1_calc[i].value;}}
     
    		ass_immo_1_taux=document.getElementById("planasstaux_1_"+simul).value; 
    		ass_immo_1_taux_c=document.getElementById("planasstauxc_1_"+simul).value; 
    		ass_immo_1_qte=parseInt(document.getElementById("planassqte_1_"+simul).value); if (ass_immo_1_qte !=0){ass_immo_1_qte = ass_immo_1_qte / 100;} else {ass_immo_1_qte = 0;}
    		ass_immo_1_qte_c=parseInt(document.getElementById("planassqtec_1_"+simul).value); if (ass_immo_1_qte_c !=0){ass_immo_1_qte_c = ass_immo_1_qte_c / 100;} else {ass_immo_1_qte_c = 0;}
    	}
    	else
    	{montant_immo_1=0.00;}
     
            /// comme ça pour 30 lignes
     
    	if (montant_immo_1 !="0.00" && duree_immo_1!="")
    	{
    		///script de calcul on calcule pour avoir : mensualite_immo_1 / mensualite_immo_1_ass / mensualite_immo_1_ass_c
            }	
     
            /// comme ça pour 30 lignes
     
    	GraphLissage(mensualite_immo_1,duree_immo_1,dureediff_immo_1, .... ect x30);
    	}
    }
    J'ai du mal a me projeter sur la création d'un tableau étant donné que je dois d'abord récupérer les données à partir des document.getElementById

    Merci pour toute l'aide reçue.
    Guillaume

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    ce genre de truc doit ce coder en utilisant un moteur d'inférence de niveau 1
    sinon ton code restera un plat de spaghetti

    exemple
    Code JavaScript : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    const preTab= [ { ref: 'montant_immo_1',    id:'planmontant_1_',   fct: gTest_a,  def:0.00, isTest:true }
                  , { ref: 'taux_immo_1',       id:'plantaux_1_',      fct: gInt      }
                  , { ref: 'duree_immo_1',      id:'planduree_1_',     fct: calc_12e  }
                  , { ref: 'dureediff_immo_1',  id:'plandureediff_1_', fct: calc_12e  }
                  , { ref: 'chxdiff_immo_1',    id:'planchxdiff_1_',   fct: calc_12e  }
                  , { ref: 'ass_immo_1_calc',   id:'plancalcass_1_',   fct: gNRadios  }
                  , { ref: 'ass_immo_1_taux',   id:'planasstaux_1_',   fct: gTxt      }
                  , { ref: 'ass_immo_1_taux_c', id:'planasstauxc_1_',  fct: gTxt      }
                  , { ref: 'ass_immo_1_qte',    id:'planassqte_1_',    fct: calc_100e }
                  , { ref: 'ass_immo_1_qte_c',  id:'planassqtec_1_',   fct: calc_100e }
                  ]
     
    function gTest_a( id, simul, def, test )
    {
      let el = document.getElementsByName(id+simul)
      test.ok = (el && el.value != '0.00')
      return test.ok ? parseInt(el.value ) : def
    }
     
    function gTxt      ( id, simul ) { return document.getElementById(id+simul).value; }
    function gInt      ( id, simul ) { return parseInt(document.getElementById(id+simul).value); }
    function calc_12e  ( id, simul )
    {
      let v = parseInt(document.getElementById(id+simul).value);
      return (v>1) ? v/12 : v;
    }
    function calc_100e ( id, simul )
    {
      let v = parseInt(document.getElementById(id+simul).value);
      return (v!=0) ? v/100 : 0;
    }
    function gNRadios  ( id, simul )
    {
      let El_Rs = document.getElementsByName(id+simul)
        , Rval  = null
        ;
      for(let i=0;i<El_Rs.length;i++)
      {
        if (El_Rs[i].checked) 
        {
          Rval = El_Rs[i].value;
          break;
        }
      }
      return Rval;
    }
     
    function CalculM1( simul )
    {
      let inV     = { } 
        , run     = { ok: true }
        , Lissage = { montant_a : 0
                    , montant_b : 0
                    // ...
                    , montant_z : 0
                    }
     
      for (let prepa of preTab)
      {
        if ( prepa.isTest )
        {
          inV[prepa.ref] = prepa.fct( prepa.id, simul, prepa.def, run )
        }
        else
        {
          if ( run.ok ) inV[prepa.ref] = prepa.fct( prepa.id, simul )
        }
      }
     
      if ( inV.montant_immo_1 > 0 )
      {
        Lissage.montant_a = inV.montant_immo_1 * inV.taux_immo_1 / inV.duree_immo_1
      }
      // etc ...
     
      // tu peux aussi créer une table d'inférences pour faire ces calculs
     
     
      GraphLissage( Lissage )  // appel mutli arguments = tous les élements de l'objet Lissage
    } 
     
     
    CalculM1('4')
     
     
    function GraphLissage( objArg )
    {
      // objArg.montant_a ... objArg.montant_z
    }
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonjour psychadelic

    Et merci beaucoup pour cet exemple, je vais prendre le temps de le comprendre et l'appliquer a la totalité de mes paramètres.

    excellente journée a toi ainsi qu'a toute la team Developpez.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre d'option maximum dans une balise select (Bug IE)
    Par Fourche dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 16/12/2008, 15h33
  2. nombre des variables dynamique dans une fonction
    Par Abdelkaoui dans le forum C
    Réponses: 10
    Dernier message: 29/02/2008, 15h37
  3. Nombre de CSS maximum dans une page
    Par farfadet dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 06/12/2007, 14h14
  4. passage d'un argument void* dans une fonction
    Par angel46 dans le forum C
    Réponses: 3
    Dernier message: 25/11/2007, 17h53
  5. Réponses: 4
    Dernier message: 10/05/2007, 07h30

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