<div dir="ltr"><div><div><div>Thanks Dennis, you have a great point there! Int is intuitively thought to be passed as a value in most languages.<br><br></div>Out of curiosity I made a quick poll based on your suggestion<br><br><a href="https://twitter.com/phelgo/status/677047198824202241">https://twitter.com/phelgo/status/677047198824202241</a><br><br></div>Lets see what answers do we get<br><br></div>Francisco<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 16, 2015 at 3:33 AM, Dennis Lysenko <span dir="ltr">&lt;<a href="mailto:dennis.s.lysenko@gmail.com" target="_blank">dennis.s.lysenko@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Francisco, <div><br></div><div>Can you run the same survey with an example that uses a struct called &quot;Song&quot; instead? I think the confusion would lie in complex value types. Int may be an unideal example. <br><br><div class="gmail_quote"><div><div class="h5"><div dir="ltr">On Tue, Dec 15, 2015, 5:27 PM Francisco Costa via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br></div></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><div>Hello all,<br><br></div>There is currently a proposal to remove `var` from Function Parameters and Pattern Matching which seems to have been already accepted<br><br><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters-patterns.md" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters-patterns.md</a><br><br></div>I cannot find the discussion on it, probably because it predates the open sourcing of Swift. While some of its arguments may sound reasonable, I think they have been greatly exaggerated.<br><br>The main point of the proposal seems to be that the `var` attribute can be easily confused with `inout`.  It then provides examples where `var` would be completely useless:<br><br>```<br><span style="font-family:monospace,monospace">func foo(i: Int) {<br>  i += 1 // Illegal<br>}<br><br>func foo(var i: Int) {<br>  i += 1 // Legal but useless since we are not using this local value anywhere<br>}<br></span></div><div>```<br><br></div><div>We today made a quick survey around the backend developers on the office (not familiar with Swift) and not a single one suggested that the second method would mutate the original parameter value. In fact, to all of them it was clear that `var` creates a local copy of the value and that the method is also missing a `return` if we want to use the incremented value.<br><br></div><div>The Swift Language Guide gives a good explanation on this as well:<br><br>&quot;Variable parameters ... give a new modifiable copy of the parameter’s value for your 
function to work with.&quot;<br><br></div><div>This is probably a concept most beginners to the language can either guess intuitively or learn in a couple of seconds.<br></div><div><br></div><div>Especially taking into account that the way we use `inout` parameters is so much advertised in Swift, to the point where calling a method with them requires to explicitly identify them with `&amp;`, it seems that by giving up the `var` attribute we would lose a convenient elegance in exchange for no real benefit to beginners.<br></div><div><br></div><div>In fact, in my experience the `var` attribute is most often used in scenarios where immutability is intentionally preserved, we pass a immutable value to a method and it returns another immutable (modified) version of that value.<br><br></div><div>Another common scenario is when you need to further modify a value that was unwrapped from an Optional. I would argue that this seems elegant and easy to read:<br><br>```<br><span style="font-family:monospace,monospace">if var x = getOptionalInt() {<br>  x += 1<br>  return x<br>}</span><br>```<br></div><div><br>While this (as has been proposed) seems like we are fighting a language limitation:<br></div><div><br>```<br><span style="font-family:monospace,monospace">if let x = getOptionalInt() {<br>  var x = x<br>  x += 1<br>  return x<br>}</span><br>```<br><br></div><div>I understand that discussing back and forth proposals that have been already accepted is counter-productive, but since this discussion doesn&#39;t seem to have been published, I would kindly ask if we can give it a second thought :)<br><br></div><div>Thanks,<br></div><div>Francisco<br></div><div><br></div></div>
</div></div><span class=""><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=8CZIdLciSFC-2BO5jF-2FiP8qN7dBFsgCUZ50wdTsolcRPc4soo8P5kLd9-2FDxkiedBZRDxzDuLZXPYzKlwDw0EAScdNgkopPzXc7AiU94u9Ndlk8RFZNs-2BNc5OtmEAGbTO9wR39Rrxp1nQhgJ6r2350kE5ybUS0OU9fGt3DUcg1I7h-2FW77Ug-2FuoY0P-2BbuNsLgi-2FOo6Ccr7y3hfcyswpE51PbXi4YRQmCQXeXcjx9Yom2alI-3D" alt="" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important" height="1" border="0" width="1">
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</span></blockquote></div></div>
</blockquote></div><br></div>