I want to play a game :) The following script implements an "Is this Sequenceable?" kind of quiz. You are presented with a series of inspectors with method sources in the image, without its class name. And by looking only the source code you have to guess if the method belongs to a SequenceableCollection hierarchy or not. If you miss, you can see the class and its class hierarchy. At the end of the game, you are presenter your score:
| hits n | hits := 0. n := 3. n timesRepeat: [ | mth cls i | cls := (Collection withAllSubclasses select: #hasMethods) atRandom. mth := cls methodDict atRandom. i := GTInspector openOn: mth sourceCode. ((self confirm: 'Method belongs to a Sequenceable Collection?') = (cls isKindOf: SequenceableCollection class)) ifTrue: [ UITheme builder message: 'Good!'. hits := hits + 1 ] ifFalse: [ UITheme builder message: 'Method class is ' , cls asString , '. Class hierarchy: ' , (cls allSuperclassesExcluding: Object) asArray asString ]. i close ]. UITheme builder message: 'Your score: ' , hits asString , ' / ' , n asString.
What could be done to enhance the script? At first it would be really nice to add an option "Cannot determine with the displayed source"... (TBD) actually there are a lot of possibilities, like asking if it has any Critics, or if could be optimized, etc. Enjoy!
Had to do a small fix for Pharo7: couldn't find #'allSuperclassesExcluding:'
ResponderEliminar