> On 15 Mar 2017, at 13:14, Adrian Zubarev <[email protected]> 
> wrote:
> 
> I still don’t see your point there. In general you won’t look at parts of 
> parts of a code. Instead you’ll take a chunk that is valid and not ambiguous 
> from the readers perspective.

To me that only works for up to 50 or maybe 70 lines of code. If the modules 
get larger I tend to miss things that are not directly visible.

> Beginners will bump into that issue, because it’s simply meant to be. 
> Everyone has to lean the difference between break, continue and return in 
> guarded statements and loops. We already have labels to exit specific nested 
> loops. Maybe that is also the way return could go?

Maybe, lets wait to see if more people think this is a real problem or not.

Rien.

> 
> Something like:
> 
> func foo() -> Int {
>      
> label:
> 
>     [1,2,3,4,5, …].forEach {  
>      
>         // Do something
>         // If certain condition is met abort and return from the parent scope
>         return(label) 42     
>     }
>      
>     return 0
> }
> 
> 
> 
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 15. März 2017 um 12:56:31, Rien ([email protected]) schrieb:
> 
>> Sorry, it seems we are talking past each other, let me try again: 
>> 
>> I left the “if” out on purpose. To show that even though the snippet was 
>> “valid” code, it was in fact ambiguous. 
>> 
>> With closures (and autoclosures) it becomes possible -to some extent- to 
>> “enhance” the language. 
>> 
>> Consider: 
>> 
>> guard let c = somefunc() else { showError(); return } 
>> myguard( let c = somefunc()) { showError(); return } 
>> 
>> In this simple example it is clear that the second return behaves quite 
>> differently from the first. 
>> It gets more difficult if the code in the block cq closure gets very large. 
>> Also, I would expect that beginners would have problems understanding this 
>> (subtile but important) difference. 
>> 
>> Regards, 
>> Rien 
>> 
>> Site: http://balancingrock.nl 
>> Blog: http://swiftrien.blogspot.com 
>> Github: http://github.com/Balancingrock 
>> Project: http://swiftfire.nl 
>> 
>> 
>> 
>> 
>> 
>> > On 15 Mar 2017, at 12:19, Adrian Zubarev <[email protected]> 
>> > wrote: 
>> >  
>> > There is no if … on my screen nor there is one here 
>> > https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon–20170313/033888.html.
>> >  May be a typo? 
>> >  
>> > In that case it cannot be a trailing closure because trailing closures are 
>> > banned in such scenarios. 
>> > https://github.com/apple/swift-evolution/blob/master/proposals/0056-trailing-closures-in-guard.md
>> >  
>> >  
>> > As for the lazy variables you’ve mentioned in the original posts, the 
>> > closure there is invoked lately but only once and it cannot be reused at 
>> > all. 
>> >  
>> > Let me know if I understood your gist now. 
>> >  
>> > if someFunction { …; return } // someFunction cannot have a trailing 
>> > closure here! 
>> >  
>> >  
>> >  
>> >  
>> > --  
>> > Adrian Zubarev 
>> > Sent with Airmail 
>> >  
>> > Am 15. März 2017 um 12:08:19, Rien ([email protected]) schrieb: 
>> >  
>> >> If I wrote this:  
>> >>  
>> >> if serverCert.write(to: certificateUrl) { showErrorInKeyWindow(message); 
>> >> return }  
>> >>  
>> >> then the meaning of return would have been different.  
>> >>  
>> >> Imo it is a problem that two pieces of code impact the understanding of 
>> >> each other and that those two pieces of code could potentially be very 
>> >> far apart.  
>> >>  
>> >> I do agree that the parenthesis are not a perfect solution, it was just 
>> >> the first thing that I could think of and that has some level of 
>> >> similarity in meaning.  
>> >>  
>> >> Regards,  
>> >> Rien  
>> >>  
>> >> Site: http://balancingrock.nl  
>> >> Blog: http://swiftrien.blogspot.com  
>> >> Github: http://github.com/Balancingrock  
>> >> Project: http://swiftfire.nl  
>> >>  
>> >>  
>> >>  
>> >>  
>> >>  
>> >> > On 15 Mar 2017, at 12:00, Adrian Zubarev 
>> >> > <[email protected]> wrote:  
>> >> >  
>> >> > I’m slightly confused by this. How is a trailing closure different from 
>> >> > a code block in Swift? It’s basically the same thing with some extra 
>> >> > syntax sugar because it happens to be the last parameter of your 
>> >> > function.  
>> >> >  
>> >> > You can simply write this if you wanted to:  
>> >> >  
>> >> > myFucntion(someLabel: abc, closureLabel: { …; return })  
>> >> >  
>> >> > Parentheses are indicating that your closure is immediately invoked.  
>> >> >  
>> >> > let someInt = { return 42 }()  
>> >> > print(someInt)  
>> >> >  
>> >> > let someClosureWhichReturnsAnInt = { return 42 } // You can reuse the 
>> >> > closure  
>> >> > print(someClosureWhichReturnsAnInt()) // Invocation happens now here  
>> >> >  
>> >> > return is scope based and it’s totally clear (to me) that in your case 
>> >> > return will return from your closure with a value of Void.  
>> >> >  
>> >> >  
>> >> >  
>> >> >  
>> >> > --  
>> >> > Adrian Zubarev  
>> >> > Sent with Airmail  
>> >> >  
>> >> > Am 15. März 2017 um 11:35:39, Rien via swift-evolution 
>> >> > ([email protected]) schrieb:  
>> >> >  
>> >> >> What does the following code fragment do?  
>> >> >>  
>> >> >> serverCert.write(to: certificateUrl) { showErrorInKeyWindow(message); 
>> >> >> return }  
>> >> >>  
>> >> >> The only possible answer is: I don’t know.  
>> >> >>  
>> >> >> The problem is finding out what the “return” statement will do.  
>> >> >>  
>> >> >> Without knowing if the {...} is a code block or a trailing closure it 
>> >> >> is impossible to know what the return statement will do. It will 
>> >> >> either end the closure or it will end the function that contains this 
>> >> >> code block.  
>> >> >>  
>> >> >> This could be disambiguated by using the same syntax as for lazy 
>> >> >> variables:  
>> >> >>  
>> >> >> serverCert.write(to: serverCertificateUrl) { 
>> >> >> showErrorInKeyWindow(message: message); return }()  
>> >> >>  
>> >> >> Now it is clear that the return statement will only terminate the 
>> >> >> (trailing) closure.  
>> >> >>  
>> >> >> A question to the educators on the list: Is this a real problem?  
>> >> >>  
>> >> >> Personally, I dislike this situation, but I am also ambivalent towards 
>> >> >> the solution I just described.  
>> >> >>  
>> >> >> Regards,  
>> >> >> Rien  
>> >> >>  
>> >> >> Site: http://balancingrock.nl  
>> >> >> Blog: http://swiftrien.blogspot.com  
>> >> >> Github: http://github.com/Balancingrock  
>> >> >> Project: http://swiftfire.nl  
>> >> >>  
>> >> >>  
>> >> >>  
>> >> >>  
>> >> >>  
>> >> >> _______________________________________________  
>> >> >> swift-evolution mailing list  
>> >> >> [email protected]  
>> >> >> https://lists.swift.org/mailman/listinfo/swift-evolution  
>> >>  
>> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to