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 [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
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 > [hidden email] > 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 _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Frédéric Ferrère-2
On 14 mai 06, at 21:42, FERRERE Frédéric wrote: > 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' ? Arg cela sent le bug! Je ne vois pas pourquoi il faudrait initializer la class Collection elle-meme Ici initialize est un message envoye a la classe donc > 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 > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Free forum by Nabble | Edit this page |