[Squeak-fr] Question sur du code

nicolas cellier ncellier at ifrance.com
Dim 14 Mai 20:17:07 UTC 2006


Le Dimanche 14 Mai 2006 21:42, FERRERE Frédéric a écrit :
> Bonjour,
>
> en lisant les sources du Jeu FreeCell disponible dans le package Game,
> je suis tombé (aie) sur un morceau de code quelque peu difficile à
> comprendre pour
> le débutant smalltakien que je suis.
>
> Si vous pouvez m'éclairer sur ce mystérieux problème .
>
> Le code en question se trouve dans la méthode newGame de la classe
> FreeCell :
>
> FreeCell>>newGame
>     Collection initialize.
>     self newGameNumber: nil.
>     state := #newGame
>
> Ma question : Quel est le rôle de la ligne    'Collection initialize' ?
>
> En outre, la méthode initialize est une méthode de classe déclarée dans
> la catégorie 'private'.
> Elle ne devrait donc pas être utilisée ici, non ?
>
> La documentation succinte parle de la création d'un générateur de nombre
> aléatoire.
>
> Mais comment peut il être utilisé dans la classe FreeCell sachant que le
> résultat de l'évaluation
> de cette instruction n'est 'à priori' stocké nulle part ?
>
> Merci.
>
> --
> Fred
> _______________________________________________
> Squeak-fr mailing list
> Squeak-fr at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr

ça ne m'a pas l'air d'être du très joli code, mais il doit pouvoir 
s'expliquer:

Ouvre un browser sur Collection>>initialize, sélectionne RandomForPicking et 
utilise le menu  'more...' puis 'explain', tu obtiens l'explication suivante:

"is a class variable, defined in class Collection"
SystemNavigation new browseAllCallsOn: (Collection classPool associationAt: 
#RandomForPicking).

code que tu peux évaluer (menu do it) et tu obtiens la liste des références à 
cette variable de classe.

Plus simplement, il y a le menu 'class var refs' depuis la liste des classes 
dans le browser.

Une variable de classe est une sorte de variable globale (statique) dont 
l'accès (scope) est restreint à une classe et ses sous classes (contrairement 
aux variables globales déclarées dans Smalltalk comme les classes, qui sont 
visibles de partout).

Donc, tu t'aperçois que le nouveau générateur (pseudo-) aléatoire est 
accessible via la méthode Collection>>randomForPicking, tu demande les 
senders de cette méthode...

Et je te laisse poursuivre ta recherche, parce que je n'ai pas le jeu chargé 
dans mon image.
Mais je suppose qu'il doit y avoir une raison pour forcer la création d'un 
nouveau générateur (quelqu'un qui ne veut pas partager le générateur 
précédent...).

Nicolas




More information about the Squeak-fr mailing list