[swift-evolution] Code blocks and trailing closures
Haravikk
swift-evolution at haravikk.me
Mon Mar 20 09:42:06 CDT 2017
> On 20 Mar 2017, at 14:24, Rien via swift-evolution <swift-evolution at swift.org> wrote:
>
> Another solution to the original problem would be to allow the parameter name of the closure outside the functions parenthesis:
>
> func test(a: Int, onError: ()->Void) {…}
>
> could be called like this:
>
> test(5) onError: { myErrorHandler() }
When you get onto that kind of syntax the obvious question is, what's wrong with:
test(5, onError: { myErrorHandler() })
To me there's no real difference, in fact all that's changed now is that a round bracket is at the end; while being within the parenthesis is a little noisier, it's also clearer what's going on. Consider, if the body of the closure were very long:
test(5, onError: {
// Lots
// and
// lots
// of
// code
})
Here the closing round bracket reminds me that this is the end of a closure being passed to a function, rather than some other code block and, if properly indented, it should be easy to jump to whatever that function is.
It could just be my personal preference; I'm generally uncomfortable with the use of trailing closures except for language-like constructs such as .forEach, and I've never had any problem using closures within the function's parenthesis, but it just seems like there's a point at which we're bolting so much onto trailing closures, that you really do have to ask what's so wrong with just passing the closure normally?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170320/8f6dfeb2/attachment.html>
More information about the swift-evolution
mailing list