[squeak-dev] The Trunk: Collections-eem.756.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Thu Jun 15 20:59:09 UTC 2017


maybe addOnce: would be more expressive than addNew:?


2017-06-15 22:52 GMT+02:00 Chris Muller <asqueaker at gmail.com>:

> ^ self select: [ : each | seen addNew: each ]
>
> ?
>
>
> On Thu, Jun 15, 2017 at 3:50 PM, Chris Cunningham
> <cunningham.cb at gmail.com> wrote:
> >
> >
> > On Thu, Jun 15, 2017 at 1:22 PM, Tobias Pape <Das.Linux at gmx.de> wrote:
> >>
> >>
> >> > On 15.06.2017, at 21:40, Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
> >> >
> >> > Hi Tobias,
> >> >
> >> > On Thu, Jun 15, 2017 at 12:32 PM, Tobias Pape <Das.Linux at gmx.de>
> wrote:
> >> >
> >> > > On 15.06.2017, at 21:22, Chris Cunningham <cunningham.cb at gmail.com>
> >> > > wrote:
> >> > >
> >> > > #testMissingThenAdd:  ?
> >> > >
> >> >
> >> > #isAdding:
> >> > #ingests:
> >> >
> >> > #wasAbsentButNowIsPresent:
> >> >
> >> > (just rambling…)
> >> >
> >> > I like added:.  Its concise, accurate and reads nicely:
> >>
> >>
> >> Ok, but then maybe #addedNew: ? So as we know more than just an adding
> >> operation succeeded… :)
> >
> >
> > So it reads:
> >
> > ^self select: [:each| seen addedNew: each]
> >
> > I like that how that reads.
> >
> > #added: wasn't bad - but I could see myself thinking it meant roughly
> 'was
> > this value already in the collection'?  Which misses the add part and is
> > backwards on the result (true if present, false if added).
> >
> > -cbc
> >>
> >>
> >> >
> >> > withoutDuplicates
> >> >       "Answer a copy of the receiver that preserves order but
> eliminates
> >> > any duplicates."
> >> >       | seen |
> >> >       seen := Set new: self size.
> >> >       ^self select: [:each| seen added: each]
> >> >
> >> > messagesDo: aBlock
> >> >       "Evaluate aBlock exactly once with all the message selectors
> sent
> >> > by me."
> >> >
> >> >       | scanner aSet |
> >> >       self isQuick ifTrue: [ ^self ].
> >> >       scanner := InstructionStream on: self.
> >> >       scanner scanFor: [ :x |
> >> >               | selector |
> >> >               (selector := scanner selectorToSendOrSelf) == scanner
> >> > ifFalse: [
> >> >                       ((aSet ifNil: [ aSet := IdentitySet new ])
> added:
> >> > selector) ifTrue: [
> >> >                               aBlock value: selector ] ].
> >> >               false "keep scanning" ]
> >> >
> >> >
> >> >
> >> > > On Jun 15, 2017 12:19 PM, "Eliot Miranda" <eliot.miranda at gmail.com>
> >> > > wrote:
> >> > > Hi Tobias,
> >> > >
> >> > > On Thu, Jun 15, 2017 at 12:06 PM, Tobias Pape <Das.Linux at gmx.de>
> >> > > wrote:
> >> > >
> >> > > > On 15.06.2017, at 20:30, Eliot Miranda <eliot.miranda at gmail.com>
> >> > > > wrote:
> >> > > >
> >> > > > Hi Levente, Hi Chris,
> >> > > >
> >> > > > On Wed, Jun 14, 2017 at 1:10 PM, Levente Uzonyi
> >> > > > <leves at caesar.elte.hu> wrote:
> >> > > > On Wed, 14 Jun 2017, commits at source.squeak.org wrote:
> >> > > >
> >> > > > Eliot Miranda uploaded a new version of Collections to project The
> >> > > > Trunk:
> >> > > > http://source.squeak.org/trunk/Collections-eem.756.mcz
> >> > > >
> >> > > > ==================== Summary ====================
> >> > > >
> >> > > > Name: Collections-eem.756
> >> > > > Author: eem
> >> > > > Time: 14 June 2017, 11:03:24.917631 am
> >> > > > UUID: 8d7c03bc-1cdb-44c7-9173-10d50c0dae29
> >> > > > Ancestors: Collections-eem.755
> >> > > >
> >> > > > Add SequenceableCollection>>withoutDuplicates for a more elegant
> fix
> >> > > > to MailMessage>>to:
> >> > > >
> >> > > > =============== Diff against Collections-eem.755 ===============
> >> > > >
> >> > > > Item was added:
> >> > > > + ----- Method: SequenceableCollection>>withoutDuplicates (in
> >> > > > category 'copying') -----
> >> > > > + withoutDuplicates
> >> > > > +       "Answer a copy of the receiver that preserves order but
> >> > > > eliminates any duplicates."
> >> > > > +       | seen |
> >> > > > +       seen := Set new: self size.
> >> > > > +       ^self select: [:each|
> >> > > > +                                 (seen includes: each)
> >> > > > +                                       ifTrue: [false]
> >> > > > +                                       ifFalse: [seen add: each.
> >> > > > true]]!
> >> > > >
> >> > > > What a great opportunity to use #addNewElement::
> >> > > >
> >> > > >         ^self select: [ :each | seen addNewElement: each ]
> >> > > >
> >> > > > I love the functionality but I don't like the selector. It seems
> to
> >> > > > imply that one must only add a new element.  So why not call this
> something
> >> > > > like addIfAbsent: ?
> >> > > >
> >> > > > Here are some suggestions.  Votes?
> >> > > > - don't change it; stick with addNewElement:
> >> > > > - addIfAbsent:
> >> > > > - ifAbsentAdd:
> >> > > > - ifMissingAdd:
> >> > > >
> >> > > > I think I prefer ifAbsentAdd: cuz addIfAbsent: looks too much
> like a
> >> > > > potential spelling error, and conflicts with typical ifAbsent:
> arguments
> >> > > > supplying exception blocks.  But I could go with ifMissingAdd:
> because it is
> >> > > > more distinctive.
> >> > >
> >> > > Well, we do have
> >> > >
> >> > >         Collection>>addIfNotPresent:
> >> > >
> >> > > So why invent a new one?
> >> > >
> >> > > Because addIfNotPresent: answers its argument and we need one that
> >> > > answers whether the element was absent.  So alas addIfNotPresent:
> is not a
> >> > > suitable candidate.
> >> > >
> >> > >
> >> > > I think the important thing with #addNewElement: is that it returns
> >> > > *whether* it added a new element
> >> > > but then again it breaks the tradition of #add* returning its
> >> > > argument…
> >> > >
> >> > > a very clear and very strange one that would reveal that a boolean
> is
> >> > > returned would be #isAbsentAndIfSoAdd: …
> >> > >
> >> > > wasAbsentAdding: or ifWasAbsentAdding: would be less cumbersome but
> I
> >> > > like something snappier that people will remember.  ifMissingAdd:
> looks good
> >> > > because it doesn't conflict with the add*: methods answering their
> argument,
> >> > > and the ifMissing implies the answer is true if the element wasn't
> already
> >> > > present.
> >> > >
> >> > > Stéphane, can you live with ifMissingAdd: ?  Chris?
> >> > >
> >> > > Best regards
> >> > >         -Tobias
> >> > >
> >> > > > _,,,^..^,,,_
> >> > > > best, Eliot
> >> > >
> >> > > _,,,^..^,,,_
> >> > > best, Eliot
> >> >
> >> > _,,,^..^,,,_
> >> > best, Eliot
> >> >
> >>
> >>
> >
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170615/e44ee846/attachment.html>


More information about the Squeak-dev mailing list