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 :

Passage d'argument à une fonction


Sujet :

JavaScript

  1. #41
    Invité
    Invité(e)
    Par défaut
    cela se passe au travers de 8.7.1 GetValue qui renvoie la valeur si le type n'est pas une référence.
    un simple assignment n'utilise pas un appel de fonction.
    Et plutot que GetValue, c'est PutValue à qui il faut s'intéresser (dans la mesure où on assign un truc à la variable, on veut savoir ce que la ref de l'identifieur a pour base) après assignment

    on peut le déplorer. on peut l'approuver. on peut imaginer ce que l'on veut. c'est la spec...
    il n'y a rien a gober qui sortirait d'un chapeau. c'est la spec.
    et quand c'est la spec on la quote, ou du moins il faut s'attendre à ce que les gens demandent l'extract auquel tu fais allusion.
    Si c'est pour expliquer comment ca marche, je vois pas pourquoi parler de v8 ou rhino, des exemples de codes sont suffisamment parlant mais ok pour l'amalgame.


    lorsqu'on passe une valeur à une fonction on peut l'utiliser mais pas la modifier
    lorsqu'on passe une référence à une valeur à une fonction on peut modifier la valeur mais pas la référence.
    l'important n'est pas ce qu'on passe à la fonction, mais comment on le passage.
    Si l'on fait un passage par valeur, alors l'objet passé (que ca soit un primitif ou un objet) n'est pas modifiable
    Si on fait un passage par référence, alors l'objet passé l'est.
    En js, le passage se fait par valeur. La référence n'est pas modiable, mais l'objet référencé l'est.
    Encore une fois, je préfère voir un extract de la spec (comme tu as fournis pour les fonctions) qui décrit le mécanisme plutot que ces def non appuyées.

    Question à part:
    toujours d'un point de vu purement théorique (donc indépendamment du l'implémentation) une variable c'est
    un symbole, dans un contexte, associé à un type et une valeur.
    même les langages les plus faiblement typé en passent par là.
    1 - je ne vois pas pourquoi une variable d'un langage quelconque devrait forcément associer un type? et pas simplement contenir un int par exemple.

  2. #42
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par galerien69 Voir le message
    un simple assignment n'utilise pas un appel de fonction.
    Et plutot que GetValue, c'est PutValue à qui il faut s'intéresser (dans la mesure où on assign un truc à la variable, on veut savoir ce que la ref de l'identifieur a pour base) après assignment
    simplement parse que pour assigner quelque chose il faut d'abord le récupérer.
    PutValue dans la spec explique comment est affecté la valeur
    le mécanisme d'assignation toujours dans la spec dit que ce qui est affecté est le résultat de l'évaluation de la partie droite de l'assignation. un passage décrit ce mécanisme d'évaluation. et cette description dit explicitement que le résultat final est obtenu par GetValue.

    Citation Envoyé par galerien69 Voir le message
    1 - je ne vois pas pourquoi une variable d'un langage quelconque devrait forcément associer un type? et pas simplement contenir un int par exemple.
    simplement parce qu'un symbole ne permet pas de savoir comment il faut l'utiliser. si tu te souviens de tes cours de CE/CM à l'école primaire tu dois te rappeler que nous avons mangé du COD du sujet du groupe verbal et bien d'autres choses et que toutes ces fonction dans la phrase sont faite de nom de verbe d'article, déterminant etc.
    tu as appris à identifier le sujet en sachant repérer le type des mots dans la phrase. sans ce type impossible de connaitre la fonction du mots ou du groupe de mot, donc impossible de construire une sémantique.
    si tu as A : 00000000000000000000000000001000 (8 en binaire)
    8 c'est quoi ? un int, un float, un char, une adresse ?
    si tu ne le sais pas tu ne peux pas savoir comment l'utiliser.
    pour pouvoir utiliser le int A il faut que tu sache que A et un int
    pour un compilateur cela ne signifie pas que le code généré contiendra ces informations cela signifie simplement que le compilateur en a besoin et qu'il le conserve quelque par sous une forme quelconque.
    pour un interprète tout se fait à l'exécution donc ces informations sont nécessairement présente à l'exécution.

    par exemple si tu as une variable i de type int et que tu le passe par valeur à une fonction
    ton compilateur C doit générer un code qui copy ce qui est a l'adresse que représente le symbole i
    si tu a une string s et que tu la passe par valeur à une fonction ton compilateur doit lire les valeurs qui qui sont à l'adresse représenté par s et toutes les cellules suivante jusqu'à trouver un 0
    s'il ne sais pas que s et une string et i un int comment peut-il choisir le code à générer ?
    une fois que tout le code est généré ce code copiera la valeur d'un int dans le premier cas et d'une string dans l'autre. mais il ne sera plus du tout question de symbole juste de cellules mémoires. La table des symbole peut donc être supprimée lorsque la compilation est terminée.



    A+JYT

  3. #43
    Invité
    Invité(e)
    Par défaut
    le mécanisme d'assignation toujours dans la spec dit que ce qui est affecté est le résultat de l'évaluation de la partie droite de l'assignation. un passage décrit ce mécanisme d'évaluation. et cette description dit explicitement que le résultat final est obtenu par GetValue.
    nous voici donc au poste de hier 00h05

    Si je fais $$$ c'est pas que pour faire $$$ hein.

    ...
    si tu ne le sais pas tu ne peux pas savoir comment l'utiliser.
    ok


    Parenthèse à part:
    Promis, à partir du moment où je connais le path depuis un variableStatement jusqu'au retour du PutValue ( ce qui n'est pas encore le cas ), j'arrête de poser des questions qui vraisemblablement dérangent ici :-/

  4. #44
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Non ça dérange pas (trop)

    s'il y a des questions c'est qu'il y a un manque dans le discours.

  5. #45
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    par exemple si tu as une variable i de type int et que tu le passe par valeur à une fonction
    ton compilateur C doit générer un code qui copy ce qui est a l'adresse que représente le symbole i
    si tu a une string s et que tu la passe par valeur à une fonction ton compilateur doit lire les valeurs qui qui sont à l'adresse représenté par s et toutes les cellules suivante jusqu'à trouver un 0
    Sans que ça ne change le bien fondé de ce que tu écris : pas de passage de chaines de caractères par valeur en C (à moins que ça ait beaucoup changé depuis le temps ?), ce qui est passé est toujours l'adresse, par valeur c'est vrai, et donc pas de code de recopie cherchant le zéro terminal. Ca c'est le développeur qui se débrouille avec. Sinon, le compilateur a effectivement besoin de connaitre les types pour connaitre la taille de ce qu'il doit empiler et dépiler.

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/04/2010, 06h30
  2. Passage de 'pipe' à une fonction ?
    Par laurent_ifips dans le forum POSIX
    Réponses: 2
    Dernier message: 25/11/2005, 07h06
  3. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  4. [TASM] Passage d'argument à une macro
    Par sorry60 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/04/2005, 18h22
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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