[swift-evolution] API Guideline bugs and enhancements

Howard Lovatt howard.lovatt at gmail.com
Sun Apr 17 18:35:15 CDT 2016

The current API guideline suggests using xxx for mutating methods and
either xxxed or xxxing for non-mutating, functional methods. I would
suggest refine these rules to:

  1. For mutating methods and get and set properties use an imperative verb
phrase, e.g. `x.sort()`, use `xxx`.
  2. For others use:
    2.a. For eagerly evaluated, get-only properties or non-mutating
methods, e.g. `x.sorted()`, use `xxxed`. In particular in `let s =
x.sorted()`, `s` does not change if `x` subsequently changes.
    2.b. For lazily evaluated, get-only properties or non-mutating methods,
e.g. `x.mapping(...)`, use `xxxing`. In particular in `let m =
x.mapping()`, `m` does change if `x` changes.

I am proposing using the name to identify when the evaluation happens.

On Saturday, 9 January 2016, Douglas Gregor via swift-evolution <
swift-evolution at swift.org> wrote:

> On Jan 5, 2016, at 12:44 PM, Erica Sadun via swift-evolution <
> swift-evolution at swift.org
> <javascript:_e(%7B%7D,'cvml','swift-evolution at swift.org');>> wrote:
> Are API Design Guideline improvement discussions in scope for the Swift
> Evolution list and if not, where would they go?
> For example, the current Swift API Design Guidelines follow these rules
> more or less.
>    - Use imperative verb phrases for mutating methods: x.reverse(),
>    x.sort(), x.tweak()
>    - Use noun phrases for non-mutating methods: x.distanceTo(...),
>    idx.successor()
> Seems to me the rules should actually be along the lines of:
>    - Use verb phrases to declare procedural methods, whether or not they
>    mutate an instance or just produce side effects: x.reverse(), x.sort(),
>    x.tweak(), x.perform(), x.dispatch(), x.send()
>    - Use noun phrases to describe values returned by a functional method:
>    x.distanceTo(y), index.successor() (This admittedly leaves further issues
>    around other functional methods, for example, seq.separatedBySequence(seq)
>    and  int.strideTo(other: Self, step:Self.Stride), etc. )
> Are enhancements for API Design Guidelines an area for community
> involvement? Where would you start a discussion about the rules? Would
> modifications involve formal proposals?
> We’re going to bring the API Design Guidelines, standard library changes,
> and Clang importer changes up for a public review together. Most of the
> pieces of this effort are described by the Swift 3 API  Design Guidelines
> blog post <https://swift.org/blog/swift-3-api-design/>, but we have some
> polishing we want to do before initiating the review.
> - Doug

-- Howard.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160418/2b6023b3/attachment.html>

More information about the swift-evolution mailing list