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 :

Paramètre de fonction [théorie]


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Femme Profil pro
    prof d'histoire ?!?
    Inscrit en
    Février 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : prof d'histoire ?!?

    Informations forums :
    Inscription : Février 2015
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Paramètre de fonction [théorie]
    bonjour à tous,

    la question bête du jour , et purement théorique.
    combien de paramètres peut on faire passer dans un fonction, y'a t'il une limite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function maFonction(param1, param2, .....){}

  2. #2
    Invité
    Invité(e)
    Par défaut
    En théorie, pas de limites : http://es5.github.io/#x8.8
    En pratique, cette limite dépend de l'implémentation.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    En pratique, cette limite dépend de l'implémentation.
    Et du bon sens !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Oui en général on en met pas trop (rarement au delà de cinq/six) pour une meilleure lisibilité/facilité d'utilisation.

    Après rien ne t'empêche de passer un tableau comme paramètre, ou d'utiliser prototype pour partager proprement (proprement par rapport aux variables globales) certaines variables dans différentes fonctions ce qui évite d'avoir besoin de les passer en paramètre.

    Donc en fait pratiquement ta question ne se pose pas vraiment car il y a toujours mieux à faire que de passer une ribambelle de paramètres dans une fonction.

  5. #5
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 705
    Points
    8 705
    Billets dans le blog
    43
    Par défaut
    Pour des raisons de lisibilité, il n'est pas conseillé qu'une fonction accepte trop de paramètres.
    Il est par exemple préférable de regrouper les paramètres appartenant à un même domaine dans des objets {...} pour limiter le nombre de paramètres d'un point de vue lexical.
    Tutoriels et FAQ TypeScript

  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
    Points : 9 944
    Points
    9 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var n=10, f=function(){}; try { while(true){ n=Math.floor(n*1.1); f.apply(new Array(n)); console.log(n); } } catch(e){}
    Je ne sais pas si ce test est tout à fait exact, mais j'arrive à une limite sur Chrome d'environ 4 milliards d'arguments. On est large.
    One Web to rule them all

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je pense que vous êtes plutôt en train de tester la capacité de apply() ou la capacité de Array()
    J'aurais plutôt vu quelque chose comme :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function test() {}
    var args = 0;
    for (var i = 1; i < 32; i++) {
    	args = (args << 1) + 1;
    	console.log(args);
    	new Function("return test(" + Array(args).join("1,").slice(0,-1) + ")")();
    }

    Et Chrome s’arrête avec ce message : Uncaught SyntaxError: Too many arguments in function call (only 65535 allowed)

    D'après http://es5.github.io/#x15.4.5.1, la longueur d'un tableau est un entier non signé de 32 bits (ToUint32), soit 232-1 = 4,294,967,295 = 4.29 milliards d'éléments dans un tableau.
    Dernière modification par Invité ; 11/03/2015 à 15h16.

  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
    Points : 9 944
    Points
    9 944
    Par défaut
    Oui, il doit y avoir deux limites, une pour l'écriture littérale des déclarations de fonctions fixée à 65535 et une autre plus théorie sur la longueur de l'Array arguments.
    One Web to rule them all

  9. #9
    Membre émérite
    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 : 37
    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
    Points : 2 778
    Points
    2 778
    Par défaut
    Whouhouuuuuuu
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    f=function(){};for(s=1;;)eval('f('+(s+=','+s+',1')+')')

  10. #10
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 705
    Points
    8 705
    Billets dans le blog
    43
    Par défaut
    Je me disais bien qu'on devait pouvoir faire ça avec eval
    Tutoriels et FAQ TypeScript

  11. #11
    Membre à l'essai
    Femme Profil pro
    prof d'histoire ?!?
    Inscrit en
    Février 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : prof d'histoire ?!?

    Informations forums :
    Inscription : Février 2015
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Comme quoi, elle était pas si bête ma question.

    4 Milliards d'arguments, ça ne fait pas un peu juste ?????? ...........

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nina29000 Voir le message
    4 Milliards d'arguments, ça ne fait pas un peu juste ?????? ...........
    Ne vous trompez pas.
    La limite de 4 milliards est celle du nombre d'éléments que peut contenir un tableau, selon le document de référence du langage (http://es5.github.io/#x15.4.5.1). C'est la limite théorique. En pratique, cette limite peut ne pas être atteinte, si le moteur javascript ne respecte pas la norme, ou si la mémoire allouée à ce même moteur n'est pas suffisante, etc.
    Pour votre question initiale, à savoir combien de paramètres peut-t-on soumettre à une fonction. La réponse théorique est : "il n'y a pas de limite", comme le précise le document de référence du langage (http://es5.github.io/#x8.8). La réponse pratique est "ça dépend de la manière dont le moteur javascript a été implémenté". Pour Chrome, nous avons trouvé 65535. Cela peut être différent dans les autres navigateurs.

  13. #13
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    En attendant, celui qui m'écrit une fonction à 65535 paramètres je jure de trouver où il habite et de venir chez lui toutes les nuits pendant un an pour l'empêcher de dormir en lui chantant du Carlos.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Citation Envoyé par nina29000 Voir le message
    Comme quoi, elle était pas si bête ma question.
    Y'a pas de question bête, mais quand on développe c'est un problème qui ne se pose pas parce que justement pour des raisons pratiques on évite de mettre beaucoup d'arguments. Pour dire que quand bien même tu aurais une réponse exacte au final on s'en tape un peu, c'est pas cela qui va te limiter ni te faire avancer

  15. #15
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Watilin
    En attendant, celui qui m'écrit une fonction à 65535 paramètres je jure de trouver où il habite et de venir chez lui toutes les nuits pendant un an pour l'empêcher de dormir en lui chantant du Carlos.
    Et moi, je jure de venir avec toi pour t'accompagner à l'accordéon !

    Question subsidiaire : si les 65535 paramètres sont des tableaux à 4 milliards d'entrées, il y a un tarif préférentiel ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  16. #16
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    Whouhouuuuuuu
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    f=function(){};for(s=1;;)eval('f('+(s+=','+s+',1')+')')
    visiblement réaliser des scripts javascript en un tweet ça t'a marqué

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/01/2006, 16h57
  2. liste énumérée de const. perso comme paramètre de fonction
    Par batou22003 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/12/2005, 20h37
  3. Paramètres de fonction : pointeurs ou valeurs ?
    Par Xandar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/11/2005, 16h50
  4. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 10h42
  5. Paramètre de fonction
    Par Reynald dans le forum Débuter
    Réponses: 6
    Dernier message: 05/01/2005, 21h48

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