[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


On Monday, June 16, 2003, at 04:04  PM, Michael Vanier wrote:

> But does anyone actually do this?  All I've ever seen is the 
> equivalent of:
> /bar/ ifTrue: foo.

Sure, it's all over the place.

As in Ruby, you can do stuff that's basically equivalent in different 
ways, choosing whichever variety is most expressive in context:

baz ifTrue; [...] ifFalse: [...].
baz ifFalse: [...] ifTrue: [...].

[self shouldContinue] whileTrue: [...].
[self exitCondition] whileFalse: [...].

Often it's handy to detect and deal with nil values:

foo ifNil: [...].
foo ifNil: [...] ifNotNil: [...].
self someExpresssion ifNotNilDo: [:result | result doSomething].

Best of all, it lets you encapsulate complicated flow control inside an 
expressive method call. This is especially handy for dealing with 
errors. Ruby's syntax for exception handling does reduce the need to 
put if statements all over the place, but it's not as expressive or 
flexible as Smalltalk :

tempVar := aDictionary at: anObject ifAbsent: [DefaultValue].
tempVar := aDictionary at: anObject ifAbsentPut: [DefaultValue].
aDictionary at: anObject ifPresent: [...].

[...] on: Exception do: [...].

[...] ensure: [...].

Socket createIfFail: [...]