[swift-evolution] [Draft] Apply -ed/-ing rule to core functional methods (e.g. filter => filtered)

Vladimir.S svabox at gmail.com
Fri Jun 17 07:32:09 CDT 2016


+1 for naming consistency. Opposite to many other modern languages where 
these methods/funcs exists, Swift choose another way(inverted) to name 
func/methods - "normal" name for mutating methods and with -ing/-ed suffix 
for non-mutating.

But as a compromise, I suggest to leave map+flatMap+reduce as-is as true 
terms-of-art, and exclude all other names from this group of exceptions. To 
have strong and clear naming rules you can rely on. Opinions? Probably this 
could be a solution to this naming issue.

On 16.06.2016 22:51, Patrick Pijnappel via swift-evolution wrote:
> Due to considerably support on this thread
> <http://news.gmane.org/find-root.php?group=gmane.comp.lang.swift.evolution&article=20783>,
> a draft proposal to revisit the core functional method exceptions to the
> -ed/-ing rule.
>
> Online
> version: https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md
>
>
>   Apply -ed/-ing rule to core functional methods
>
>   * Proposal: SE-NNNN
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/NNNN-functional-methods-ed-ing.md>
>   * Author: Patrick Pijnappel <https://github.com/PatrickPijnappel>
>   * Status: Awaiting review
>   * Review manager: TBD
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#introduction>Introduction
>
> The Swift API Guidelines standardizes non-mutating method forms on verbs
> ending in -ed/-ing (or nouns). However, a few non-mutating forms have been
> kept as "Terms of
> Art": |map|, |flatMap|, |filter|, |reduce|, |dropFirst| and |dropLast|.
> This proposal proposes to bring these in line with all other non-mutating
> forms (e.g. |filter => filtered|).
>
> Swift-evolution threads: Source
> <http://news.gmane.org/find-root.php?group=gmane.comp.lang.swift.evolution&article=20783>
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#motivation>Motivation
>
> These method have been kept to preserve the terms of art. Generally, this
> can have significant benefits:
>
>   * Anyone familiar with the term will immediately understand it, and use
>     their assumptions about how it works.
>   * Users learning the term from Swift can use their knowledge when
>     encountering it elsewhere.
>   * Experienced users will be able to use the mental pattern matching
>     they've built-up for quickly recognizing common programming patterns.
>
> However, basically all of the benefits of using a term of art still apply
> to the modified forms: – For recognition, the modified forms are still very
> close to the traditional terms of art. So both coming to and from Swift
> you'll be able to use your knowledge pretty much unaffected.
>
>   * If the user looks for e.g. |filter| they are pretty much guaranteed to
>     quickly find the correct form, be it through code-completion, google or
>     a fix-it.
>   * There isn't really any violation of assumptions that might cause
>     problems in this case.
>   * Any mental pattern matching will likely transfer quickly due to the
>     minimal difference.
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#proposed-solution>Proposed
>     solution
>
> The proposed solution modifies the method verbs to their -ed/-ing forms
> (preferring the former).
>
> It removes the last clear exceptions to the -ed/-ing rule from the standard
> library, which previously were exactly the opposite of what one would
> expect based on the API guidelines (and the rest of the language).
>
> It also aids users in learning to pattern match on the -ed/-ing rule and
> internalizing the API guidelines, since now all methods are named this way
> – instead of the most commonly used methods defying the normal pattern.
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#detailed-design>Detailed
>     design
>
> The change would rename the following method families:
>
> |map => mapped flatMap => flatMapped filter => filtered reduce => reduced
> dropFirst => droppingFirst dropLast => droppingLast |
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#impact-on-existing-code>Impact
>     on existing code
>
> The Swift migrator and fix-its would be provided for the change.
>
>
>     <https://github.com/PatrickPijnappel/swift-evolution/blob/functional-methods-ed-ing/proposals/XXXX-functional-methods-ed-ing.md#alternatives-considered>Alternatives
>     considered
>
>   * Alternatively -ing suffixes could be used
>     for |map|/|flatMap|/|filter|/|reduce|. However, these are normally
>     reserved for when -ed doesn't really work (e.g. droppedFirst).
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>


More information about the swift-evolution mailing list