[squeak-dev] Boolean whenTrue:whenFalse:

Torge Husfeldt torge.husfeldt at gmx.de
Fri May 17 16:08:49 UTC 2019


Hi Subbu, 
see, I forgot about the good old simple parantheses. As I said, rusty.
I’d say, if we don’t reach unanimity regarding the new selectors, this shortcut should fit the bill for your initial request?

Von meinem iPhone gesendet

> Am 17.05.2019 um 13:02 schrieb K K Subbu <kksubbu.ml at gmail.com>:
> 
> 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