[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-fr
Subject:    [ruby-fr:0078] Re: passage d arguments
From:       Picavet Vincent <Vincent.Picavet () vt ! siemens ! de>
Date:       2001-08-23 10:12:07
[Download RAW message or body]



> Normalement Ruby manipule les objets par référence (comme Java). Pour
> des raisons d'efficacité les nombres (et les booléens il me semble) sont
> traités différemment, en tant que valeur immédiate (la valeur du nombre
> est stockée directement dans la variable C qui sert de référence). Au
> niveau du passage des paramètres, comme Ruby copie la référence, on a
> une sémantique de passage par valeur (copie) pour les nombres. Dans le
> cas des chaînes (et de toutes les autres classes), on a bien une
> sémantique de passage par référence, et donc si une méthode modifie ses
> paramètres (à supposer que le type soit mutable), la modification sera
> visible à l'extérieur. (Guy pourra te donner les détails mieux que moi)
Comment se fait il alors, si les chaines sont bien passees par
reference, que ceci se produise :

irb(main):001:0> def mod(chaine)
irb(main):002:1> chaine=chaine+" un truc"
irb(main):003:1> end
nil
irb(main):004:0> s ="fdwknj"
"fdwknj"
irb(main):005:0> mod(s)
"fdwknj un truc"
irb(main):006:0> s
"fdwknj"
 ^^^^^^^^-- Ne devrait on pas avoir "fdwknj un truc" ?

> A noter qu'il y a en fait assez peu de méthodes qui modifient leurs
> paramètres; c'est parfois considéré comme une faute de style et peu
> rendre le code difficile à comprendre. 
J en suis bien conscient, et je ne le ferais pas si  j ecrivais un
programme ruby, mais je dois creer une interface pour utiliser des
fonctions C avec Ruby, et il faut que la maniere d appeler les fonctions
dans Ruby soit semblable ce qui est fait en C. Cela implique que ce n
est pas du code "ruby-style".

> Par convention, on ajoute le
> caractère ! à la fin du nom de la méthode pour prévenir l'utilisateur et
> parfois une méthode alternative qui ne modifie pas ses paramètres est
> fournie (cf String.strip et String.strip!)
J avais bien vu ca dans le Prog.Book.

> Voir aussi à ce propos les questions 7.13 et 7.14 de la FAQ disponible
> en Français à:
>         http://rubyfr.org/documentation/faq/rubyfaq-fr.html
Deja lu ! :)
Merci et a+
Vincent
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic