Yes, the documentation value of the OO solution is much higher (assuming that you are aware of the concepts and know Smalltalk in this case). It is actually a simple simulation.
--Hannes On 5/4/10, laurent laffont <laurent.laff...@gmail.com> wrote: > Cool. I've just understood the 100 doors problem looking at your code. I was > too lazy to try to understand the original one on > http://programming.dojo.net.nz/languages/smalltalk/index :) > > Laurent Laffont > > > On Tue, May 4, 2010 at 5:55 PM, 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 >> >> > _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners