I already know the benefit of immutability over mutability in being able to reason about code and introducing less bugs, especially in multithreaded code. In creating structs, though, I cannot see any benefit over creating a completely immutable struct over a mutable one.

Let's have as an example of a struct that keeps some score:

struct ScoreKeeper { var score: Int }

In this structure I can change the value of score on an existing struct variable

var scoreKeeper = ScoreKeeper(score: 0) scoreKeeper.score += 5 println(scoreKeeper.score) // prints 5

The immutable version would look like this:

struct ScoreKeeper { let score: Int func incrementScoreBy(points: Int) -> ScoreKeeper { return ScoreKeeper(score: self.score + points) } }

And its usage:

let scoreKeeper = ScoreKeeper(score: 0) let newScoreKeeper = scoreKeeper.incrementScoreBy(5) println(newScoreKeeper.score) // prints 5

What I don't see is the benefit of the second approach over the first, since structs are value types. If I pass a struct around, it always gets copied. So it does not seem to matter to me if the structure has a mutable property, since other parts of the code would be working on a separate copy anyway, thus removing the problems of mutability.

I have seen some people using the second example, though, which requires more code for no apparent benefit. Is there some benefit I'm not seeing?