BifaceMcLeOD The HighGlandeur | Bon, pour en revenir à la question du topic, je donne évidemment raison à lorill : si on modifie la valeur d'un objet passé en paramètre dans une fonction, il sera toujours modifié après être sorti de la fonction ; par contre, si on modifie la référence sur l'objet passé en paramètre, l'objet passé en argument ne sera pas modifié après être sorti de la fonction. Et évidemment, difficile de modifier la valeur d'une instance d'une classe non mutable (comme String ou Integer)...
Mais il y a plusieurs autres solutions pour résoudre le problème :
- Retourner l'objet modifié. C'est ce qu'il y a de plus simple et c'est propre. Et ça marche pour les instances de classes non mutables. Mais ça coince dès qu'on a plusieurs objets à retourner.
- Définir une classe n-uplet qui contient l'ensemble des objets à retourner. Eventuellement, tous ses attributs peuvent être publics, puisqu'on ne se sert pas deu concept d'abstraction ici. C'est tout à fait propre, mais l'inconvénient, c'est que cela oblige à créer une instance supplémentaire à l'exécution (soit la fonction crée cette instance, soit on lui passe en paramètre, ce qui permet à plusieurs appels à la fonction de partager cette instance "temporaire" ).
- Passer en paramètre un tableau de taille 1 contenant l'objet à modifier, plutôt que passer simplement l'objet. Ce qui revient à passer une référence sur la référence vers l'objet. C'est bien crade, mais ça marche, et c'est très efficace à l'exécution.
Message édité par BifaceMcLeOD le 15-10-2002 à 11:30:32
|