JeuWeb - Crée ton jeu par navigateur
Passer une variable par reference? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Passer une variable par reference? (/showthread.php?tid=4793)

Pages : 1 2


Passer une variable par reference? - Argorate - 06-05-2010

Bonjour,

J'aimerais savoir s'il est possible de passer une variable par référence à une fonction en java script. Il me semble déjà avoir rencontré le problème mais je n'ai pas les codes qui me permettrait de trouver la réponse sur moi.

j'ai rapidement tester:

Code :
function main()
{
    var a = 2;
    alert('debut ' +a);
    test(a);
    alert('fin ' + a);
}

function test(a)
{
    alert('debut fonc ' +a);
    a += 2;
    alert('fin fonc ' +a);
}
et j'obtiens : 2, 2, 4, 2.

Donc j'aimerais pouvoir conservé la modif faite dans la fonction en dehors de celle-ci et sans utilisé de variable global. (avoir 2, 2, 4, 4 pour l'exemple)

En php le passage par référence se fait avec le symbole "&" comme vous le savez sans doute déjà, avez-vous l'équivalent JS?

merci.


RE: Passer une variable par reference? - php_addict - 06-05-2010

allez je tente une réponse:

en déclarant un objet?

--> http://sirdarckcat.blogspot.com/2007/07/passing-reference-to-javascript.html
--> http://snook.ca/archives/javascript/javascript_pass


RE: Passer une variable par reference? - Argorate - 06-05-2010

Oui j'avais vu ça, mais évidemment tu ne seras pas étonné que cela me convienne pas, je parle pour des variables simple ^^

Merci quand même Smile


RE: Passer une variable par reference? - php_addict - 06-05-2010

y a pas moyen de mettre tes variables simples dans un objet ???


RE: Passer une variable par reference? - Sephi-Chan - 06-05-2010

Ce n'est pas très propre de passer une variable scalaire par référence, surtout dans un langage comme Javascript.
Pour quel genre de données souhaites-tu faire ça ?


Sephi-Chan


RE: Passer une variable par reference? - Allwise - 06-05-2010

Bonne question, c'est quoi ta problématique qui exige un passage de variables par référence en javascript ?


RE: Passer une variable par reference? - Argorate - 06-05-2010

Je vois pas ce qu'il y a de sale a ne pas travaillé sur la variable au lieu d'une copie mais bon^^

C'est pour la concaténation de chaine, genre:

Code :
var test = 'toto';
fonc(test);
alert(test);

function fonc(chaine)
{
     chaine += ' et tata';
}

Du coup je vais plutôt faire un return mais j'aurais préféré sans (plus lisible).

Apparemment JS ne le permet effectivement pas pour de simple variable... Sad

Merci quand même.


RE: Passer une variable par reference? - Sephi-Chan - 06-05-2010

(06-05-2010, 02:19 PM)Argorate a écrit : Je vois pas ce qu'il y a de sale a ne pas travaillé sur la variable au lieu d'une copie mais bon^^

C'est bien le problème, de ne pas se rendre compte quand on fait quelque chose de sale. Big Grin

Plus sérieusement, une fonction prend des paramètres et renvoie une valeur. Si elle commence à modifier des choses en dehors de sa portée, c'est dangereux et sale (sinon on ne se serrait pas fait chier à inventer cette notion de portée).

Pour ton utilisation, pourquoi ne pas utiliser la méthode concat() de la classe String ?


var jeu = "Jeu";
jeu.concat("Web"); // Retourne "JeuWeb"


Sephi-Chan


RE: Passer une variable par reference? - Argorate - 06-05-2010

Ça c'est pas vraiment un argument qui me convinc tu vois :p
Si on fait les choses bien, il n'y a aucun risque a modifier une variable par référence...
C'est de la peur irrationnel là. ^^
Si encore ça faisait quelque chose de sale dans la manière dont c'est traité derrière, là je t'aurais dit ok.

Sinon pour la fonction concat() c'est quoi l'avantage par rapport a une "concaténation manuelle"?

Mais en fait, mon code est un peu plus compliqué que ça, c'est pas une chaine fixe que je dois concaténé... y a une boucle etc...


RE: Passer une variable par reference? - Sephi-Chan - 06-05-2010

(06-05-2010, 02:44 PM)Argorate a écrit : Ça c'est pas vraiment un argument qui me convinc tu vois :p
Si on fait les choses bien, il n'y a aucun risque a modifier une variable par référence...
C'est de la peur irrationnel là. ^^

Sans offense : est-ce vraiment à toi de dire si tu fais bien les choses ? C'est une remarque générale : l'auto-évaluation des pratiques est délicate.

Si tu as une variable, c'est que tu vas réutiliser son contenu.
Si ta fonction transforme le contenu de ta variable, elle ne sera plus aussi réutilisable. Ça se fait mais c'est dangereux : il est plus clair de créer une nouvelle variable, clairement marquée comme transformée.


(06-05-2010, 02:44 PM)Argorate a écrit : Sinon pour la fonction concat() c'est quoi l'avantage par rapport a une "concaténation manuelle"?

À la base, c'est toi qui fait une une fonction pour faire de la concaténation. Big Grin
Je te retourne la question. Quel sera l'avantage de ta fonction (si tu arrives à la faire) par rapport à une concaténation manuelle ?


(06-05-2010, 02:44 PM)Argorate a écrit : Mais en fait, mon code est un peu plus compliqué que ça, c'est pas une chaine fixe que je dois concaténé... y a une boucle etc...

On ne peut pas t'aider sans savoir ce que tu veux faire. ^^


Sephi-Chan