No I do not think it is silly. It is a simple example and illustrates the OO paradigm.
This would be a nice case for a video. That brings out the usefulness of the tools. --Hannes On 5/4/10, John McKeon <p3ano...@gmail.com> wrote: > Looking at rosettacode <http://rosettacode.org/wiki/100_doors> most > languages look nearly identical (or, at the very least, ugly/crappy) when > written out procedurely so that one might end up deciding to just stick with > C. > > I know I am going off the deep end a bit, but the whole answer to "why > Smalltalk?" lies in the fact that problems should/would be approached in a > completely different manner. As I am sure they would in most of the other > languages if one were not restricted to 20 or so lines of code. > > Since it is example code, at least in the case of Smalltalk, an object > oriented solution would be in order - i.e. show how it would be solved using > "everything is an object". Unfortunately, it doesn't really fit into "a few > lines of code" to display on a page (even though the classes/objects and > code required to implement them is little more than a few lines). And you > also don't get any feel for the great tools. Perhaps, some insight into how > one would run the code in Java/Eclipse, or Visual C <chuckle> with all the > includes and project setup, etc might be a useful addition to the > comparisons... > > Object subclass: #Corridor > instanceVariableNames: 'doors count' > classVariableNames: '' > poolDictionaries: '' > category: '100Doors' > > initialize: anInteger > "initialize the receiver with the given number of doors" > count := anInteger. > doors := OrderedCollection new. > anInteger timesRepeat: [ doors add: Door new ] > > pass > "iterate over the doors" > 1 to: count do: [ :i | self passBy: i ] > > passBy: anInteger > "if the nth door is open close it otherwise open it" > doors by: anInteger do: [ :door | door toggle ] > > printOn: aStream > "print the open doors" > aStream cr. > doors withIndexDo: [ :door :i | door isOpen ifTrue: [ aStream > nextPutAll: i asString, ' is open'; cr ]] > > Corridor class > > pass: anInteger > "return a new Corridor with the given number of doors that has been > passed thru" > ^self new > initialize: anInteger; > pass > > > ================================================================== > > Object subclass: #Door > instanceVariableNames: 'isOpen' > classVariableNames: '' > poolDictionaries: '' > category: '100Doors' > > isOpen > "Answer the value of isOpen" > ^ isOpen > > toggle > "if the receiver is open close it else open it" > isOpen := isOpen not > > initialize > "initialize the receiver to be closed" > super initialize. > isOpen := false > > =========================================================== > Patch to iterate over a collection by each nth item > > OrderedCollection>>by: anInteger do: aBlock > | index | > index := anInteger. > [index <= lastIndex] > whileTrue: > [aBlock value: (array at: index). > index := index + anInteger] > > > Probably silly for the problem given but just my 2 cents > John > > > -- > http://john-mckeon.us/seaside > _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners