[Newbies] Total newb...

Ron Teitelbaum Ron at USMedRec.com
Tue Oct 14 15:49:47 UTC 2008


Hi Tony,

You stumbled on one of the most powerful features of Smalltalk.  The Block
(See BlockContext).  Blocks are a contextual memory space.  They can be
passed around and do all sorts of great things that Smalltalk programmers
take for granted.

The basic form is [] this is a no argument, no code block.  Pretty boring
cause it does nothing.

A more advanced form is ['hello']  which is a block with a literal string.
Still pretty boring.  But at least you can get the string out of the block
by   aBlock := ['hello'].  ^aBlock value.

A bit more advanced: [:arg | 'Hello ', arg]  has an argument.
Now you can do ^aBlock value: 'Ron'.

You can have more arguments [:arg1 :arg2 | 'Hello ', arg1, ' ', arg2].

Now you can do ^aBlock value: self firstName value: self lastName.

Even more complicated is: 
| isLoggedIn |

isLoggedIn := true.

[:arg | 'Hello ', arg, ' you are ', (isLoggedIn ifTrue: [''] ifFalse: ['
not']), ' logged in']

Now you can do ^aBlock value: 'Ron'. From anywhere and the block remembers
the context from where it was created.  Pretty cool huh.

The regular select uses a block too: 

self select: [:anItem | anItem isBlue]

which uses a do that uses a block

self do: [:anElement | 
	aBlock value: anElement) ifTrue ...
]

Blocks are certainly a good thing to learn.

Happy Coding,
Ron Teitelbaum

> -----Original Message-----
> From: beginners-bounces at lists.squeakfoundation.org [mailto:beginners-
> bounces at lists.squeakfoundation.org] On Behalf Of Tony Giaccone
> Sent: Tuesday, October 14, 2008 2:12 AM
> To: beginners at lists.squeakfoundation.org
> Subject: [Newbies] Total newb...
> 
> Ok, so I'm really new to smalltalk. I've done a few basic tutorials
> and have a simple understanding of the syntax. My pervious programing
> experience is mostly java/C with a bit of Objective C in the mix.
> 
> I'm trying to figure out how to do what seems like a simple thing.
> 
> I have a set, I'd like to find out if an object exists in the set.
> 
> In a general form. Let's use the a relatively simple case.
> 
> Assume I have classes Rock Paper and Scissors.
> 
> 
> validHands := Set new.
> validHands add: Rock new; add Paper new; add Scissors  new.
> 
> Assume I have a player object which responds to the method
> throwsAHand with an instance of Rock Paper or Scissors.
> 
> how do I craft
> 
> validHands contains: aPlayer throwsAHand
> 
> I know that contains: takes a block, and that this isn't correctly
> done.. but I'm trying to get the a handle on how to do this.
> The intent is to return a boolean, that indicates if the object the
> player threw is in the Set of valid objects that can be thrown.
> 
> 
> Tony
> 
> 
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners



More information about the Beginners mailing list