<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
While I think it's good to loose `var` for parameters, the different semantics for Structs and Classes can be confusing sometimes. It is not always obvious at caller site, whether you are passing a Struct or a Class instance, and therefore whether the call
 will alter the instance at caller site.
<div class=""><br class="">
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On 16.12.2015, at 03:33, Dennis Lysenko via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Francisco,&nbsp;</span>
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<br class="">
</div>
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
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.&nbsp;<br class="">
<br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Tue, Dec 15, 2015, 5:27 PM&nbsp;Francisco Costa via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">
<div dir="ltr" class="">
<div class="">
<div class="">
<div class="">Hello all,<br class="">
<br class="">
</div>
There is currently a proposal to remove `var` from Function Parameters and Pattern Matching which seems to have been already accepted<br class="">
<br class="">
<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters-patterns.md" target="_blank" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters-patterns.md</a><br class="">
<br class="">
</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 class="">
<br class="">
The main point of the proposal seems to be that the `var` attribute can be easily confused with `inout`.&nbsp; It then provides examples where `var` would be completely useless:<br class="">
<br class="">
```<br class="">
<span style="font-family: monospace, monospace;" class="">func foo(i: Int) {<br class="">
&nbsp; i &#43;= 1 // Illegal<br class="">
}<br class="">
<br class="">
func foo(var i: Int) {<br class="">
&nbsp; i &#43;= 1 // Legal but useless since we are not using this local value anywhere<br class="">
}<br class="">
</span></div>
<div class="">```<br class="">
<br class="">
</div>
<div class="">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 class="">
<br class="">
</div>
<div class="">The Swift Language Guide gives a good explanation on this as well:<br class="">
<br class="">
&quot;Variable parameters ... give a new modifiable copy of the parameter’s value for your function to work with.&quot;<br class="">
<br class="">
</div>
<div class="">This is probably a concept most beginners to the language can either guess intuitively or learn in a couple of seconds.<br class="">
</div>
<div class=""><br class="">
</div>
<div class="">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 class="">
</div>
<div class=""><br class="">
</div>
<div class="">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 class="">
<br class="">
</div>
<div class="">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 class="">
<br class="">
```<br class="">
<span style="font-family: monospace, monospace;" class="">if var x = getOptionalInt() {<br class="">
&nbsp; x &#43;= 1<br class="">
&nbsp; return x<br class="">
}</span><br class="">
```<br class="">
</div>
<div class=""><br class="">
While this (as has been proposed) seems like we are fighting a language limitation:<br class="">
</div>
<div class=""><br class="">
```<br class="">
<span style="font-family: monospace, monospace;" class="">if let x = getOptionalInt() {<br class="">
&nbsp; var x = x<br class="">
&nbsp; x &#43;= 1<br class="">
&nbsp; return x<br class="">
}</span><br class="">
```<br class="">
<br class="">
</div>
<div class="">I understand that discussing back and forth proposals that have been already accepted is counter-productive, but since this discussion doesn't seem to have been published, I would kindly ask if we can give it a second thought :)<br class="">
<br class="">
</div>
<div class="">Thanks,<br class="">
</div>
<div class="">Francisco<br class="">
</div>
<div class=""><br class="">
</div>
</div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=8CZIdLciSFC-2BO5jF-2FiP8qN7dBFsgCUZ50wdTsolcRPc4soo8P5kLd9-2FDxkiedBZRDxzDuLZXPYzKlwDw0EAScdNgkopPzXc7AiU94u9Ndlk8RFZNs-2BNc5OtmEAGbTO9wR39Rrxp1nQhgJ6r2350kE5ybUS0OU9fGt3DUcg1I7h-2FW77Ug-2FuoY0P-2BbuNsLgi-2FOo6Ccr7y3hfcyswpE51PbXi4YRQmCQXeXcjx9Yom2alI-3D" alt="" width="1" height="1" border="0" style="min-height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span class="Apple-converted-space">&nbsp;</span>_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
</blockquote>
</div>
</div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=z8-2FItS9d607zlxyiqd-2BXa09jaXmO60VXV2wLjA8i2wniibXisMRgr8SZCfz9Evu2-2F2uM2sHCLcKrzaiKQR5S5cSRXlnstMx1S-2BVtXbCd0RoEBcLoOpRnaDLsb-2F5HUxA8C2MLR-2BSPaXlHsNXuT5bSpUej2OlLPQ4oQSJI9JyAEajJYV9g33iIzEkUMQukneE4ESSDWVfEp9TvhDZ2rNdAOgHWZKRBZLWsw-2BSmG1WAb4M-3D" alt="" width="1" height="1" border="0" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><span class="Apple-converted-space">&nbsp;</span>_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution
 mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div>
</blockquote>
</div>
<br class="">
</div>
</div>
</body>
</html>