Spoiler alert: Readers win.
- You don't rely on the instance state.
- You've better protection againt typos.
@ivar
might not exist and nothing will failivar
will complain. - They're easier to mock in specs in case you need to.
- They properly wrap the state so that refactors are easier
- they can be aliased
- they can be
alias_method_chain
ed - no kittens will die
- you can properly set their accessibility
- etc.
- When setting things on the constructor.
- When memoizing stuff (and be careful).