== Why is this an issue?

Trailing closure syntax can only be used with the last argument to a function call. Place a function type parameter anywhere else in the list and you limit the options of the caller.


=== Noncompliant code example

[source,swift]
----
func foo(p1: Int->Int, p2: Int){  // Noncompliant; p1 should come at the end
  print(p1(p2))
}

foo({a in a * 2}, 42) // Trailing closure syntax can't be used here
----


=== Compliant solution

[source,swift]
----
func foo(p2: Int, p1: Int->Int){
  print(p1(p2))
}

foo(42) {a in a * 2}
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Move "x" to the end of the parameter list.


'''
== Comments And Links
(visible only on this page)

=== on 21 May 2015, 17:33:56 Ann Campbell wrote:
\[~freddy.mallet] what do you think of the SQALE characteristic? I'm not sure what to pick for rules about making your API easier to use.

=== on 27 May 2015, 09:01:12 Freddy Mallet wrote:
Hi @Ann, according to the description of this rule the code provided in the "Non-Compliant Code Example" will lead to a runtime error so I would associate this rule to the SQALE "Reliability " characteristic. But at the same time I'm not sure to fully understand this rule.

=== on 27 May 2015, 19:13:52 Ann Campbell wrote:
Thanks for weighing in [~freddy.mallet], but what we're looking at in the first line of the  Noncompliant example is the function declaration, and as-is, you cannot use trailing closure syntax to call it. (This code made my eyes cross, and [~elena.vilchik] had to talk to me like I was 6 when explaining it.)

So this really is just about making your API easier to use, & I'm afraid the exactly right SQALE category doesn't exist for it. :-/

endif::env-github,rspecator-view[]
