[swift-evolution] When to use argument labels, part DEUX
Jonathan Tang
jonathan.d.tang at gmail.com
Mon Feb 8 12:18:51 CST 2016
On Mon, Feb 8, 2016 at 5:23 AM, Dave Abrahams via swift-evolution <
swift-evolution at swift.org> wrote:
>
> on Mon Feb 08 2016, Thorsten Seitz <swift-evolution at swift.org> wrote:
>
> > I agree that positioning the preposition depending on whether a
> > default value is present is unfortunate, but I don't agree that it
> > would complicate the rules significantly as it just adds a very simple
> > special case for one rule.
>
> Heh, but then people will really demand a special case for move(from: a,
> to: b)
>
>
> > Is the problem that it complicates API evolvement significant enough
> > to outweigh the advantage of this rule?
>
> That's one problem. I think we should also be concerned about rules
> that create a feeling of non-uniformity and un-predictability across
> code. For example, you don't want to see something like this:
>
> removeAllBricks(having: .CrackleGlazeFinish)
>
> removeAllBeamsHaving(.RottenWood)
>
>
I just thought of another point in favor of prepositions going inside
parentheses: verbs that take an optional indirect object, expressed as an
overload.
protocol Message {
// Stores the whole message
func store(toCoreDataEntity tableName: String)
func store(toUserDefaults key: String)
// Stores only a single field within the message
func store(field: String, toCoreDataEntity tableName: String)
func store(field: String, toUserDefaults key: String)
}
protocol RenderLayer {
// Moves the whole layer
func move(toDOMElement element: DOMElement, edge: Edge)
// Moves an element within the render layer
func move(elementWithID id: String, toDOMElement element, edge: Edge)
func move(element element: DOMElement, toDOMElement element, edge: Edge)
}
With preposition-inside-parentheses, there's a nice symmetry between these
API calls:
move(toDOMElement: table, edge: .Bottom) // Whole layer
move(elementWithID: "#nav", toDOMElement: table, edge: .Bottom) // Just
one element
With preposition-outside-parentheses, they become pretty awkward:
moveTo(DOMElement: table, edge: .Bottom)
move(elementWithID: "#nav", toDOMElement: table, edge: .Bottom) // Why
different base name?
moveTo(DOMElement: table, edge: .Bottom, elementWithID: "#nav") // What's
getting moved?
moveTo(DOMElement: table, edge: .Bottom, onlyTheElementWithID: "#nav") //
Works, but wordy
None of this is what I'd consider a deal-breaker, and I know the review
period has ended, but if a decision hasn't been made yet and you're on the
fence, please consider. :-)
> > Closure arguments with default values won't profit from it if written
> > as trailing closure, of course.
> >
> > No good idea how to remedy that (trailing argument label?? probably not).
>
> I think that's a whole 'nother bag o' worms, and, yes, some language
> syntax might be needed. IOW, the issue goes beyond mere guidelines.
>
> > -Thorsten
> >
> > Am 08. Februar 2016 um 12:47 schrieb Matthew Judge via swift-evolution
> > <swift-evolution at swift.org>:
> >
> > Agree that basing the preposition location on whether there is a
> default value is
> > unfortunate. The problem is "Zone" is not redundant/needless when
> calling it with the
> > default value.
> >
> > copyWith()
> >
> > If I were asking "what zone?" Ok it's the default zone, but I'm just
> asking "with what?"
> >
> > On Feb 7, 2016, at 10:48, Dave Abrahams via swift-evolution
> > <swift-evolution at swift.org> wrote:
> >
> > on Sat Feb 06 2016, Douglas Gregor <swift-evolution at swift.org>
> wrote:
> >
> > On Feb 6, 2016, at 10:08 PM, Dave Abrahams via
> swift-evolution
> > <swift-evolution at swift.org> wrote:
> >
> > on Sat Feb 06 2016, Thorsten Seitz
> > <swift-evolution at swift.org> wrote:
> >
> > So the preposition should move into the argument
> label if the argument is
> > optional?
> >
> > copy(withZone: zone = nil)
> >
> > That's a good idea.
> >
> > It seems unfortunate that the placement of the preposition
> should
> >
> > change depending on whether there is a default argument or
> not,
> >
> > especially since it is reasonable to imagine that an API
> evolves to
> >
> > gain a default argument later on.
> >
> > You're right; it would complicate the rules significantly, too.
> >
> > - Doug
> >
> > -Thorsten
> >
> > Am 06.02.2016 um 14:45 schrieb Matthew Judge via
> swift-evolution
> >
> > <swift-evolution at swift.org>:
> >
> > Very first method
> >
> > copyWith(zone: Zone = nil)
> >
> > can be called as
> >
> > copyWith()
> >
> > I'm assuming this is still something we don't
> want right?
> >
> > On Feb 6, 2016, at 02:16, Douglas Gregor via
> swift-evolution
> >
> > <swift-evolution at swift.org> wrote:
> >
> > On Feb 5, 2016, at 1:32 PM, Dave
> Abrahams via swift-evolution
> >
> > <swift-evolution at swift.org>
> > wrote:
> >
> > Given all the awesome feedback I've
> gotten on this thread, I
> > went back
> >
> > to the drawing board and came up with
> something new; I think
> > this one
> >
> > works. The previously-stated goals still
> apply:
> >
> > [snip goals]
> >
> > P.S. Doug is presently working on
> generating new importer
> > results, based
> >
> > on these guidelines, for your perusal.
> They should be ready
> > soon.
> >
> > Here’s a link:
> >
> >
> https://github.com/apple/swift-3-api-guidelines-review/pull/10/files
> >
> > Feedback welcome!
> >
> > - Doug
> >
> >
> _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> >
> https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> >
> https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> >
> https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > --
> >
> > -Dave
> >
> > _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > --
> >
> > -Dave
> >
> > _______________________________________________
> >
> > swift-evolution mailing list
> >
> > swift-evolution at swift.org
> >
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
>
> --
> -Dave
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160208/7639fc43/attachment.html>
More information about the swift-evolution
mailing list