Er… sorry, by “returns results” I mean, return the removed items.

Thanks,
Jon

> On Sep 26, 2017, at 4:59 PM, Jonathan Hull <jh...@gbis.com> wrote:
> 
> The main issue here is that the proposal is missing the variant which returns 
> the elements that are removed… and that throws out a lot of very useful use 
> cases.
> 
>> 1. Is it right to assert that with a “removing” operation, the closure 
>> should return `true` for removal?
> Yes
> 
>> 2. Is it likely that users will want to switch from out-of- to in-place, and 
>> if so, will having to flip the closure cause confusion/bugs?
> They always have the option of just inverting the closure.  I doubt people 
> will change the function being used unless they are doing a larger refactor 
> (or need the removed results).
> 
>> 3. Should we “complete” the matrix of 4 operations, or is it fine for it to 
>> have gaps?
> I am on the fence.  I don’t think gaps will cause an issue, but I could see 
> the usefulness of having more options (but are they worth the upkeep?).
> 
>> 4. If you are for completing, what should X and Y be called?
> removing(where:) and formFilter()  (though I have always been a fan of 
> filter/filtered)
> 
> 
> As I mentioned above, I think that either returning @discardableResults or 
> having a variant which returns the results is very important.  Look at the 
> other thread on this topic from this morning for a discussion of why.
> 
> Thanks,
> Jon
> 
> 
>> On Sep 26, 2017, at 4:12 PM, Ben Cohen via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> 
>> Hi everyone,
>> 
>> Reviving a pitch for a feature that didn’t make it into Swift 4. This was 
>> discussed in the core team recently, and feedback was wanted regarding the 
>> naming of the method and the polarity of the where closure.
>> 
>> Here’s the proposal:
>> 
>> https://github.com/airspeedswift/swift-evolution/blob/0f4a24d6ded2ab7cb39c1a68e0f92705a7615d73/proposals/NNNN-RemoveWhere.md
>> 
>> To keep things simple, this version removes the Equatable version. That 
>> could be added as a separate proposal.
>> 
>> 
>> The issue to resolve is: should the closure have the same polarity as 
>> filter, and if not, should filter also have an in-place equivalent?
>> (wait, don’t reply yet, read the rest of the email first :)
>> 
>> From the original proposal:
>> 
>>> `remove(where:)` takes a closure with `true` for elements to remove. 
>>> `filter` takes a closure with `true` for elements to keep. In both cases, 
>>> `true` is the "active" case, so likely to be what the user wants without 
>>> having to apply a negation. The naming of `filter` is unfortunately 
>>> ambiguous as to whether it’s a removing or keeping operation, but 
>>> re-considering that is outside the scope of this proposal.
>> 
>> 
>> Assuming you accept the premise that a closure returning `true` to `remove` 
>> is the “right way around” for the argument to an in-place removal operation, 
>> this means that we have a situation where if you want to flip from in-place 
>> to out-of-place removal, you have to reverse the closure.
>> 
>> Alternatively, we could duplicate the functionality, and have both filter 
>> and remove operations have in- and out-of-place variants, completing this 
>> 2x2 matrix:
>> 
>> out-of-place, true to keep:  filter(_:)
>> in-place, true to remove:    remove(where:)
>> out-of-place, true to remove:        X?
>> in-place, true to keep:              Y?
>> 
>> The names for X that fall easily out of the naming guidelines are 
>> removed(where:) or removing(where:)
>> 
>> Y is trickier. Normally, the out-of-place would be a variant (like the past 
>> participle) of the mutating operation, but with filter the out-of-place 
>> method is already named,* so options are limited. formFilter(_:) is one 
>> suggestion.
>> 
>> 
>> To help guide feedback on this, here are 4 questions to answer:
>> 
>> 1. Is it right to assert that with a “removing” operation, the closure 
>> should return `true` for removal?
>> 2. Is it likely that users will want to switch from out-of- to in-place, and 
>> if so, will having to flip the closure cause confusion/bugs?
>> 3. Should we “complete” the matrix of 4 operations, or is it fine for it to 
>> have gaps?
>> 4. If you are for completing, what should X and Y be called?
>> 
>> Any answers, or further thoughts on any of the above, appreciated.
>> 
>> Ben
>> 
>> 
>> 
>> * while you could argue that this can be resolved by renaming filter, 
>> renames like this have a very high bar to clear. Also, filter is a term of 
>> art, hence its previous exemption from the naming guidelines.
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to