Also since the example rewrite is a single line function it could be rewritten 
as:

  def f2(input: Integer) : Integer = input match {
    case _ if input > 10 => 10
    case _ if input < 0  => 0
    case _ => input
  }

Even with the overkill of pattern matching it — it still is easy to understand 
what is being returned without forcing the use of “return” all over the place.



> On 2015-12-20, at 22:30:28, Craig Cruden <[email protected]> wrote:
> 
> Having returns all over the place in the middle of the code already is sloppy 
> to my eyes, I prefer to try at all cost to avoid spaghetti like code.  
> 
> The downside of Swift not having everything as a function/expression - or at 
> least other replacements for them is it tends to encourage spaghetti code 
> like the example you are posting.  I also tend to dislike compound/nested 
> if’s where possible sometimes breaking stuff down into other functions 
> scooped within functions.  
> 
> Hence for my example I am going to use the Scala match (which is for pattern 
> matching — i.e. more than just a switch) with guards.  _ = match everything / 
> def is func.
> 
>   def f(input: Integer) : Integer = {
>     input match {
>       case _ if input > 10 => 10
>       case _ if input < 0  => 0
>       case _ => input
>     }
>   }
> 
> The downside of Scala is that it rides on top of the jvm and I would prefer 
> something that compiled using llvm.   Two things that I would like to see for 
> me to be able to replace a jvm solution for server code is clean functional 
> code where you did not have to either do let x then return at the end or 
> random “returns” in the middle of code and of course a nice jdbc (interface 
> standard for SQL databases rather than relying on vendor specific driver 
> code) like standard SQL database interface [which is out of scope for 
> evolution].
> 
> 
>> On 2015-12-20, at 19:11:09, ilya <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> -1 on inferred return type and omitting return with func
>> 
>> Both features are actually available in the language as-is, just not with 
>> the func keyword:
>> 
>> let someInferredFunction = { _ in 5}  // () -> Int
>> 
>> When teaching Swift we actually teach func + return keywords together, they 
>> make it easy to see all possible return paths from a function.
>> 
>> And we recommend using func instead of a closure when there is a multiline 
>> body with control statements. Having implicit return in that case hurts 
>> readability.  For example, out of three possible return points within this 
>> function only one is not marked with return:
>> 
>> func f(input: Int) -> Int {
>>     if input > 10 { 
>>         return 10 
>>     }
>>     if input < 0 { 
>>         return 0 
>>     }
>>     input
>> }
>> 
>> 
>> +1 on omitting return from var {} declaration, those methods look like 
>> closures and will often be one-liners.
>> 
>> 
>> On Sun, Dec 20, 2015 at 5:29 AM, Craig Cruden via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> I looked at the discussion and it looked like they were discussion two 
>> things combined.
>>    - inferred return type (on function signature) 
>>    - and omitting return on the return.
>> 
>> I agree with Chris on the fact that the function should have the type of 
>> return specified on the signature and not inferred since it is useful for 
>> API documentation to know that ahead of time on a strongly typed language.
>> 
>> What is not necessary is actually forcing people to type return “x” on the 
>> last line - since “return” is rather redundant and clutter for those people 
>> of a functional programming paradigm point of view.
>> 
>> 
>>> On 2015-12-20, at 4:15:15, Stephen Christopher via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> The discussion I was remembering, comment courtesy of Chris: 
>>> https://devforums.apple.com/message/1014317#1014317 
>>> <https://devforums.apple.com/message/1014317#1014317>
>>> 
>>> (linked from https://devforums.apple.com/thread/255242 
>>> <https://devforums.apple.com/thread/255242>)
>>> 
>>>  _______________________________________________
>>> 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] <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

Reply via email to