[squeak-dev] Boolean whenTrue:whenFalse:

K K Subbu kksubbu.ml at gmail.com
Fri May 17 11:02:47 UTC 2019


This also works:

  ('isBoolean' beginsWith: 'is') ifTrue: [Display flash: World bounds]; 
yourself

Regards .. Subbu

On 16/05/19 8:43 PM, Torge Husfeldt wrote:
> Hi Nico,
> 
> I'm convinced this only works without the extra [] value because you 
> chose a special selector. For keyword-selector it should go to "self".
> 
> Which part exactly is not optimized? The "ifTrue:" has a special 
> handling in the bytecode complier, and iirc yourself is also not 
> "actually sent".
> 
> Cdlt
> 
> Torge
> 
> On 16.05.19 17:08, Nicolas Cellier wrote:
>> Hi,
>> Ah yes, it works, no need for extra [] value
>>
>>     (3 > 2) ifTrue: [Transcript cr; show: 'bingo!']; yourself
>>
>> The code is not optimized, but it works.
>>
>> Le jeu. 16 mai 2019 à 16:52, Torge Husfeldt <torge.husfeldt at gmx.de 
>> <mailto:torge.husfeldt at gmx.de>> a écrit :
>>
>>     Salut Nico,
>>
>>     please excuse if my squeak knowlege is a bit rusty, but wouldn't
>>     this do the job:
>>
>>     self findlast: [:each |
>>
>>     [self testSomeConditionFor: each] value ifTrue:[self
>>     performSomeAction:each]; yourself.
>>
>>     ].
>>
>>     Just an idea. And very sad that I have to wrap the condition in a
>>     block, but I guess othewise the recipient for "yourself" would be
>>     "self"
>>
>>     On 14.05.19 17:02, Nicolas Cellier wrote:
>>>     Oups, my example was a bit stupid because findLast: loop stops at
>>>     first true, but you get my intention...
>>>     Replace with select:/reject: or provide a whenFalse: side effect...
>>>
>>>     Le mar. 14 mai 2019 à 16:23, Nicolas Cellier
>>>     <nicolas.cellier.aka.nice at gmail.com
>>>     <mailto:nicolas.cellier.aka.nice at gmail.com>> a écrit :
>>>
>>>         Hi,
>>>         From time to time, I need to perform some additional action
>>>         (side effect) when a boolean is true, but preserve that
>>>         boolean as return value.
>>>
>>>         Here is a pseudo example:
>>>
>>>             self findLast: [:each |
>>>                 | conforming |
>>>                 conforming := self testSomeConditionFor: each.
>>>                 conforming
>>>                     ifTrue:
>>>                         [ "found one, do some side effect before
>>>         searching next"
>>>                         self performSomeAction: each ].
>>>                  conforming ].
>>>
>>>         Or shorter, but I dislike the redundant true:
>>>
>>>             self findLast: [:each |
>>>                 (self testSomeConditionFor: each)
>>>                     and:
>>>                         [ "found one, do some side effect before
>>>         searching next"
>>>                         self performSomeAction: each.
>>>                         true ]].
>>>
>>>         What i seek is even shorter:
>>>
>>>             self findLast: [:each |
>>>                 (self testSomeConditionFor: each)
>>>                     whenTrue:
>>>                         [ "found one, do some side effect before
>>>         searching next"
>>>                         self performSomeAction: each ]].
>>>
>>>         Of course, we would have companions whenFalse:,
>>>         whenTrue:whenFalse:...
>>>         Would you buy it?
>>>
>>>
>>>
>>
>>
> 
> 



More information about the Squeak-dev mailing list