New idiom for conditional testing?

Randal L. Schwartz merlyn at stonehenge.com
Sat Sep 29 17:12:31 UTC 2001


>>>>> "danielv" == danielv  <danielv at netvision.net.il> writes:

danielv> ^{[self class = aRenameVariableChange class].
danielv> [className = aRenameVariableChange changeClassName].
danielv> [isMeta = aRenameVariableChange isMeta].
danielv> [oldName = aRenameVariableChange oldName].
danielv> [newName = aRenameVariableChange newName]} allTrue

danielv> Note that the conditions should be tested in order and lazily - stops at
danielv> the first false.

danielv> The implementation is as follows -
Collection> allTrue 
danielv> 	^self detect: [:e | e value not] ifNone: [nil]) isNil


Well, rather than alter Collection for this one-off, you could
keep it all here with:

{[self class = aRenameVariableChange class].
 [className = aRenameVariableChange changeClassName].
 [isMeta = aRenameVariableChange isMeta].
 [oldName = aRenameVariableChange oldName].
 [newName = aRenameVariableChange newName]}
    do: [:e | e value ifFalse: [^false]].
 ^true

But the regularity of the pattern still irks me.  You're still
faster cutting and pasting some of that code than simply typing it,
which is always a red flag for me.  Maybe an "associationsDo:", like

{(self class) -> #class.
 classname -> #classChangeName.
 isMeta -> #isMeta.
 oldname -> #oldName.
 newName -> #newName}
   associationsDo:
     [:e | e key = (aRenameVariableChange perform: e value) ifFalse: [^false]].
^true

No, maybe that's no better. :)

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn at stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!




More information about the Squeak-dev mailing list