<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=""><br class=""><div><blockquote type="cite" class=""><div class="">Le 29 janv. 2016 à 17:44, Trent Nadeau via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><a href="https://github.com/tanadeau/swift-evolution/blob/master/proposals/00xx-use-inout-at-func-call-site.md" class="">https://github.com/tanadeau/swift-evolution/blob/master/proposals/00xx-use-inout-at-func-call-site.md</a><div class=""><br class=""></div><div class=""><pre style="" class=""># Use `inout` at Function Call Sites

* Proposal: TBD
* Author(s): [Trent Nadeau](<a href="http://github.com/tanadeau" class="">http://github.com/tanadeau</a>)
* Status: TBD
* Review manager: TBD

## Introduction

Currently when a function has `inout` parameters, the arguments are passed with the `&amp;` prefix operator. For example:

```swift
func add1(inout num: Int) {
    num += 1
}

var n = 5
add1(&amp;n) // n is now 6
```

This operator does not fit with the rest of the language nor how the parameter is written at the function declaration. It should be replaced so that `inout` is used in both locations so that the call site above would instead be written as:

```swift
add1(inout n) // symmetric and now obvious that n can change
</pre></div></div></div></blockquote></div><div><br class=""></div><div>inout vs &amp; doesn’t look that ugly in a simple single argument function, but what if you have many:</div><div><br class=""></div><div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">getUserData(userid, &amp;username, &amp;groupid, &amp;shell)&nbsp;<span style="color: rgb(0, 132, 0);" class="">// Current syntax</span></div></div><div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">getUserData(userid, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> username, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> groupid, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> shell)&nbsp;<span style="color: rgb(0, 132, 0);" class="">// Proposal</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><br class=""></div></div><div>Yes, for the above one should use something better ( userData=getUserData(userid) ). But, I’m sure there are valid scenario where one wants multiple inout parameters. And such an example must be provided to visualize the impact of moving from &amp; to inout.</div><div><br class=""></div><div>Just realizing that the above syntax is without label, even the proposal doesn’t show the use of the inout with labels…</div><div>So the current proposal changes:</div><div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">add</span>(number: &amp;<span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">n</span>)</div><div class="">to</div><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="font-family: Menlo; font-size: 11px; margin: 0px; line-height: normal; color: rgb(0, 132, 0);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">add</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">(</span><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> number: n) </span>// Perfect symmetry</div><div style="font-family: Menlo; font-size: 11px; margin: 0px; line-height: normal; color: rgb(0, 132, 0);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">add</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">(number: </span><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> n) </span>// Matching token location</div><div style="font-family: Menlo; font-size: 11px;" class=""><br class=""></div><div class=""><span style="font-family: Helvetica; font-size: 12px;" class="">So with my bad example from above&nbsp;</span>changing:</div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">getUserData(id: userid, name: &amp;username, gid: &amp;groupid, shell: &amp;shell)</div></div><div class="">to:</div></div></div></div><div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">getUserData(id: userid, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> name: username, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> gid: groupid, <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> shell: shell)</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">getUserData(id: userid, name: <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> username, gid: <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> groupid, shell: <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">inout</span> shell)</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><br class=""></div></div><div><div class="">That’s a lot of word, syntax highlighting does help a bit but I do not want to rely on it.</div><div class=""><br class=""></div><div class="">Dany</div><div class=""></div></div></body></html>