I agree that the current form is better than the old way, but a lot of Swift's syntax is based around trying to be friendly for new programmers (remember removal of ++ and --?), and the form `x throws -> y` reads a lot like `x can throw y`, since the arrow is pointing between the two. I just would like some way to make it explicitly clear to those who have not had years of experience with Swift that `throws` is a standalone modifier.
-thislooksfun (tlf) > On Dec 26, 2016, at 12:41 PM, Derrick Ho <[email protected]> wrote: > > I personally do not see anything wrong with its current placement. > > It may be there because it was based on an existing cocoa pattern from > objective-c > > - (NSString *)bazWithError:(NSError **)error { ... } > > Because objective c could only return one thing, using pointer-to-pointer was > needed to deliver more than one. > > When swift came along it became this... > > func baz(error: NSErrorPointer) -> String > > The style felt old-fashioned and was replaced with throw. > > func baz() throws -> String > > > The evolution is consistent. The pattern is familiar. I think we should > keep the placement of throw as it is. > > On Mon, Dec 26, 2016 at 9:38 AM thislooksfun via swift-evolution > <[email protected] <mailto:[email protected]>> wrote: > Hello Swifters, > > I've been writing a lot more Swift code recently, and I have found that the > default placement of the 'throws' declaration is often confusing, especially > to those of us switching from languages where the type of errors thrown is > explicitly defined (like Java) > > For example, > // This is pretty clear, this can throw an error > > func foo() throws > > { ... } > > > > // Also pretty clear, this returns a String > > func bar() -> String > > { ... } > > > > // Confusing. Does this throw a String? Does it return a String? Does it do > both? > > // I personally keep reading this as 'this can throw a String' > > func baz() throws -> String > > > > // Equivalent code in Java (not a model, just for clarification of why the > above is confusing) > > String baz() throws StringFormatException > I therefore suggest either tweaking the syntax around, or moving, the > `throws` keyword to avoid this confusion. > > Some ideas I've had: > // Add a comma to separate them > > func baz() throws, -> String > > > > // Move `throws` to the end > > func baz() -> String throws > > > > // Change it to a prefix modifier (like `mutating`) > > throwing func baz() -> String > > I'm still not sold on any of the above syntaxes, but I would love to hear > your feedback. > > This would affect existing code, but it would be a fairly small change that > would result in very large readability improvements, especially for > newcomers, and especially for those coming for a language such as Java. > > -thislooksfun (tlf) > > > > > > > > _______________________________________________ > > > swift-evolution mailing list > > > [email protected] <mailto:[email protected]> > > > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution> > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
