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 :

[astuce] Comment passer des résultats en sortie par référence


Sujet :

JavaScript

  1. #1
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut [astuce] Comment passer des résultats en sortie par référence
    Alut,

    C'est bien connu, le JavaScript n'autorise pas la spécification explicite de passage par valeur ou par référence, comme cela se fait dans d'autres langages.

    Mais dans le cas d'une fonction renvoyant plusieurs objet, il est interessant de pouvoir le faire.... mais JavaScript ne permet pas de l'exprimer.

    On peut contourner le problème en profitant du fait que JavaScript passe toujours certains argument par référence : c'est le cas des objet et des tableaux.

    Si par exemple une fonction doit renvoyer deux tableaux, alors on peut déclarer la fonction comme recevant deux tableaux, et on prendra soin de créer deux tableaux vides que l'on passera à la fonction. Car bien que le fonction ne puisse pas créer elle-même ces deux tableaux, ou plutôt, bien qu'elle ne pourrait pas renvoyer par référence deux tableaux qu'elle aurait créé, elle peut tout de même modifier deux tableaux qui lui sont passer automatiquement par référence (le passage ne peut se faire que dans un sens). On pourra faire de même avec des objet que l'on créera vide pour les passer à la fonction. Notez que les chaînes de caractère, qui sont « immutable », ne peuvent pas se voir appliquer cette méthode, pas plus que les type simple non-plus.

    Pour éviter les ennuie, il faut écrire un commentaire en entête de la fonction, qui précise que les objet ou tableaux doivent être créer par l'appelant (on évite ainsi des risques de mauvaises utilisation.... et comme toujours, on corrige par des commentaire ce que le typage ne permet pas d'exprimer).

    Dans le cas d'une fonction renvoyant plusieurs élément simple, il n'y a pas d'autres possibilité que de lui faire renvoyer un objet complexe intégrant tous ces éléments simples (cette méthode alternative peut d'ailleur être employé également avec les éléments complexes).

    Oilà Z'êtes content ? ... sais pas, en tous cas moi ze le suis
    Allez, àbasoir
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  2. #2
    Membre habitué Avatar de gKsam
    Profil pro
    Inscrit en
    Août 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 166
    Points : 153
    Points
    153
    Par défaut Bien sympa
    Bon, je n'avais jamais eu besoin de ce type de retour. Mais maintenant, si j'en ai besoin j'y penserai.

    Donc bonne astuce
    Le plus compliqué, c'est de faire quelque chose de simple.

Discussions similaires

  1. [Compiler] Comment passer des arguments d'entrée et de sortie ?
    Par nahouto dans le forum MATLAB
    Réponses: 5
    Dernier message: 08/07/2009, 15h00
  2. Réponses: 4
    Dernier message: 20/04/2007, 14h02
  3. Réponses: 4
    Dernier message: 26/05/2006, 17h17
  4. Réponses: 7
    Dernier message: 30/12/2004, 12h01

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