Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nom de fonction dynamique

11 réponses
Avatar
Machaon
Bonjour à tous,

javascript permet-il l'utilisation de nom de fonction dynamique ?

Exemple :
------------------------------------------------------
FonctionMain(UneVariable) {
UneVariable('titi'); //<== Problème ici ;-))
}

UneFonction(t) {
alert(t);
}

// Dans le code, appel de :
FonctionMain('UneFonction');

// qui me renvoi un alert de 'titi'
------------------------------------------------------

Merci pour votre aide !

Machaon

10 réponses

1 2
Avatar
Francis Spiesser
Machaon vient de nous annoncer :
Bonjour à tous,

javascript permet-il l'utilisation de nom de fonction dynamique ?



Oui avec eval (mais c'est crade !)

FonctionMain(UneVariable) {
eval(UneVariable+'('titi')'); //<== plus de problème ici
}

--
______
Francis (enlever .NIPUBNISOUMIS)
"Quand tout baigne, il y a forcément quelque chose qui va couler"

Avatar
Bruno Desthuilliers
Bonjour à tous,

javascript permet-il l'utilisation de nom de fonction dynamique ?

Exemple :
------------------------------------------------------
FonctionMain(UneVariable) {
UneVariable('titi'); //<== Problème ici ;-))
}

UneFonction(t) {
alert(t);
}

// Dans le code, appel de :
FonctionMain('UneFonction');

// qui me renvoi un alert de 'titi'


En Javascript, les fonctions sont des objets, donc tu peux passer
directement la fonction:

function main(callback) {
callback('titi');
}

function bidule(t) {
alert(t);
}

main(bidule);

Si tu a vraiment besoin que ce soit un *nom* de fonction, ça doit a
priori être possible en interrogeant l'objet window, ie:

function main(callback_name) {
var func = window[callback_name];
func('titi');
}

Mais là, je ne te garantie pas à 100%.

Avatar
Machaon
"Francis Spiesser" a
écrit dans le message de news:

Machaon vient de nous annoncer :
Bonjour à tous,

javascript permet-il l'utilisation de nom de fonction dynamique ?



Oui avec eval (mais c'est crade !)

FonctionMain(UneVariable) {
eval(UneVariable+'('titi')'); //<== plus de problème ici
}


Merci pour ta solution, c'est celle que j'avais fini par trouver.
Mais pkoi c crade ?

Machaon


Avatar
Francis Spiesser
Machaon a émis l'idée suivante :

Mais pkoi c crade ?

Parce qu'exécuter du code généré à la volée, ça ne facilite ni le

débogage ni la relecture.
Un code correctement pensé et structuré devrait (normalement...)
pouvoir se passer de ce genre de rustines.

--
______
Francis (enlever .NIPUBNISOUMIS)
Il y a 10 sortes de personnes : celles qui comprennent le binaire et
les autres

Avatar
Machaon
"Francis Spiesser" a
écrit dans le message de news:

Machaon a émis l'idée suivante :

Mais pkoi c crade ?

Parce qu'exécuter du code généré à la volée, ça ne facilite ni le débogage

ni la relecture.
Un code correctement pensé et structuré devrait (normalement...) pouvoir
se passer de ce genre de rustines.


Et est-ce qu'un code bien pensé et strucuturé peut se passer de fonction en
appelant une autre dynamiquement ?
Si non, comment puis-je ne pas utiliser eval() ?


;-)
Machaon


Avatar
Olivier Miakinen

Parce qu'exécuter du code généré à la volée, ça ne facilite ni le débogage
ni la relecture.
Un code correctement pensé et structuré devrait (normalement...) pouvoir
se passer de ce genre de rustines.


Et est-ce qu'un code bien pensé et strucuturé peut se passer de fonction en
appelant une autre dynamiquement ?
Si non, comment puis-je ne pas utiliser eval() ?


switch (variable) {
case valeur1 :
fonction1();
break;
case valeur2 :
fonction2();
break;
case valeur3 :
fonction3();
break;
default :
fonctionD();
break;
}


Avatar
filh
Machaon wrote:

"Francis Spiesser" a
écrit dans le message de news:

Machaon a émis l'idée suivante :

Mais pkoi c crade ?

Parce qu'exécuter du code généré à la volée, ça ne facilite ni le débogage

ni la relecture.
Un code correctement pensé et structuré devrait (normalement...) pouvoir
se passer de ce genre de rustines.


Et est-ce qu'un code bien pensé et strucuturé peut se passer de fonction en
appelant une autre dynamiquement ?
Si non, comment puis-je ne pas utiliser eval() ?


En précisant mieux ce que tu veux faire, si tu veux juste passer une
fonction en argument, il n'y a pas de pb - surtout en javascript.

Sinon si tu tiens vraiment à avoir un nom, ben... tu fais une
hashtable, où tu stocke ta fonction avec le nom qui te plait.

Mais grosso modo on n'a pas besoin d'éval.

FiLH

--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Roland Barthes.
http://www.filh.org



Avatar
Bruno Desthuilliers
"Francis Spiesser" a
écrit dans le message de news:


Machaon vient de nous annoncer :

Bonjour à tous,

javascript permet-il l'utilisation de nom de fonction dynamique ?



Oui avec eval (mais c'est crade !)

FonctionMain(UneVariable) {
eval(UneVariable+'('titi')'); //<== plus de problème ici
}


Merci pour ta solution, c'est celle que j'avais fini par trouver.


Alors changes en. Tu peux regarder mon autre post pour deux façons
d'aborder le problème (nb: après vérif, la seconde fonctionne - en tous
cas sous mozilla).

Mais pkoi c crade ?


Difficile à mettre au point, difficile à maintenir, très vite difficile
à comprendre, et potentiellement dangereux.

Dans une écrasante majorité de cas, quand tu utilises eval(), c'est que
soit tu ne connais pas la fonctionnalité du langage permettant de s'en
passer, soit qu'il y a un problème de conception. C'est en tous cas mon
expérience avec Python, et pour le moment avec Javascript aussi.



Avatar
filh
Olivier Miakinen <om+ wrote:


Parce qu'exécuter du code généré à la volée, ça ne facilite ni le débogage
ni la relecture.
Un code correctement pensé et structuré devrait (normalement...) pouvoir
se passer de ce genre de rustines.


Et est-ce qu'un code bien pensé et strucuturé peut se passer de fonction en
appelant une autre dynamiquement ?
Si non, comment puis-je ne pas utiliser eval() ?


switch (variable) {
case valeur1 :
fonction1();
break;
case valeur2 :
fonction2();
break;
case valeur3 :
fonction3();
break;
default :
fonctionD();
break;
}


Beark :)


a=[];

a["x"]=function () { alert("x");}
a["y"]=function () { alert("y");}

a["x"]();
a["y"]();

(Encore que bon dans les langages compilés le switch est peut-être plus
rapide pour des raisons de gestion de cache mémoire).

FiLH

--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Roland Barthes.
http://www.filh.org



Avatar
Olivier Miakinen

switch (variable) {
case valeur1 :
fonction1();
break;
case valeur2 :
fonction2();
break;
case valeur3 :
fonction3();
break;
default :
fonctionD();
break;
}


Beark :)


Syntax error... try « break ».

a=[];

a["x"]=function () { alert("x");}
a["y"]=function () { alert("y");}

a["x"]();
a["y"]();


Beurk ! :-)


1 2