Performing a sum with Swift I wrote the following in Swift to perform a sum:

let total:Double = session.courses.reduce(0) { $0 + $1.totalPrice() }


It's concise, it does the job but it does not seems very readable to me. Wouldn't a "classic" for loop be more explicit/readable/maintainable?

var total:Double = 0
for dish in session.courses {
    total += dish.totalPrice()
}


Should closures always be the way to go in Swift?
Both solutions are correct. Some advantages of the "functional" approach
with reduce():


Concise code.
Returns a constant. It is clear to the reader that
total is assigned to exactly once, and the compiler may use this
information for optimizing code.
The type annotation on the result value is not needed:

let total = session.courses.reduce(0) { $0 + $1.totalPrice() }


because that can be inferred from the compiler automatically.
This will continue to compile without changes if the type of
totalPrice() is changed, e.g. from Double to Float.


To increase legibility, you can use named closure parameters instead
of the $n shortcuts:

let total = session.courses.reduce(0) { (partialSum, dish) in
    partialSum + dish.totalPrice()
}