[squeak-dev] Boolean whenTrue:whenFalse:
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Fri May 17 17:20:50 UTC 2019
Hi Torge,
considering that I'm probably the one who made cascading work for inlined
messages, I'm happy enough with your suggestion ;)
https://marc.info/?l=squeak-dev&m=123180721604241&w=2
I thought I once proposed some Compiler changes to make the cacaded inlined
message still optimized, but I can't find them anymore.
It was rejected as overkill (two many changes for so few value)
Le ven. 17 mai 2019 à 18:08, Torge Husfeldt <torge.husfeldt at gmx.de> a
écrit :
> 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?
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20190517/16eac2fb/attachment.html>
More information about the Squeak-dev
mailing list
|