On Mon, Apr 3, 2017 at 1:29 AM, Daniel Duan via swift-evolution < swift-evolution@swift.org> wrote:
I want to retract my nitpickings on argument labels; `all(equal:)` and
`all(match:)` are the best names for these methods.
things all match condition?
things all equal value?
If we accept `all` as a term of art (which I think we should), along with
these labels the use site are very readable!
On Mar 31, 2017, at 6:38 PM, Daniel Duan via swift-evolution < > swift-evolution@swift.org> wrote:
nit: should these names be `all(matching)`/`all(equalTo)` per API Design
Guidelines?
On Mar 31, 2017, at 8:28 AM, Ben Cohen via swift-evolution < > swift-evolution@swift.org> wrote:
Hi,
A short proposal for you as part of the algorithms theme. Hopefully
non-controversial, aside from the naming of the method and arguments, about
which controversy abounds. Online copy here: https://github.com/
airspeedswift/swift-evolution/blob/9a778e904c9be8a3692edd19bb757b
23c54aacbe/proposals/0162-all-algorithm.md
Add an all algorithm to Sequence
- Proposal: SE-NNNN
- Authors: Ben Cohen <https://github.com/airspeedswift>
- Review Manager: TBD
- Status: *Awaiting review*
Introduction
It is common to want to confirm that every element of a sequence equals a
value, or matches a certain criteria. Many implementations of this can be
found in use on github. This proposal adds such a method to Sequence.
Motivation
You can achieve this in Swift 3 with contains by negating both the
criteria and the result:
// every element is 9
!nums.contains { $0 != 9 }// every element is odd
!nums.contains { !isOdd($0) }
but these are a readability nightmare. Additionally, developers may not
make the leap to realize contains can be used this way, so may hand-roll
their own for loop, which could be buggy, or compose other inefficient
alternatives:
// misses opportunity to bail early
nums.reduce(true) { $0.0 && $0.1 == 9 }// the most straw-man travesty I could think of...Set(nums).count == 1 && Set(nums).first == 9
Proposed solution
Introduce two algorithms on Sequence which test every element and return
true if they match:
nums.all(equal: 9)
nums.all(match: isOdd)
Detailed design
Add the following extensions to Sequence:
extension Sequence {
/// Returns a Boolean value indicating whether every element of the sequence
/// satisfies the given predicate.
func all(match criteria: (Iterator.Element) throws -> Bool) rethrows -> Bool
}
extension Sequence where Iterator.Element: Equatable {
/// Returns a Boolean value indicating whether every element of the sequence
/// equals the given element.
func all(equal element: Iterator.Element) -> Bool
}
Source compatibility
This change is purely additive so has no source compatibility consequences.
Effect on ABI stability
This change is purely additive so has no ABI stability consequences.
Effect on API resilience
This change is purely additive so has no API resilience consequences.
Alternatives considered
Not adding it.
_______________________________________________
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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution