Immutable Data Patterns
Pure Updates
Return a new value from a function.
pure-update
A pure update function returns the next value from its inputs. It does not change outside state, which makes the trace easier to reason about.
Pure Updates
pure_update.js
Replay: real traced execution (multi-file project)
const bonus = 2;
function addBonus(score, extra) {
return score + extra;
}
const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;
console.log("bonus=" + bonus);
console.log("report=" + report);
const bonus = 5;
function addBonus(score, extra) {
return score + extra;
}
const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;
console.log("bonus=" + bonus);
console.log("report=" + report);
const bonus = 10;
function addBonus(score, extra) {
return score + extra;
}
const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;
console.log("bonus=" + bonus);
console.log("report=" + report);
bonus ← 2
1const bonus→ 2 = 2; //@bonus=5, 102function addBonus(score, extra) {3 return score + extra;4}56const nextScore = addBonus(20, bonus2);7const report = "score=" + nextScore;//@bonus=5, 10 function addBonus(score, extra)
1const bonus = 2; //@bonus=5, 102function addBonus(score20, extra2) {3 return score + extra2;4}nextScore ← 22, report ← score=22
3 return score + extra;4}56const nextScore→ 22 = addBonus(20, bonus2);7const report→ score=22 = "score=" + nextScore22;89console.log("bonus=" + bonus2);10console.log("report=" + reportscore=22);outputbonus=2 report=score=22
bonus ← 5
1const bonus→ 5 = 5;2function addBonus(score, extra) {3 return score + extra;4}56const nextScore = addBonus(20, bonus5);7const report = "score=" + nextScore;function addBonus(score, extra)
1const bonus = 5;2function addBonus(score20, extra5) {3 return score + extra5;4}nextScore ← 25, report ← score=25
3 return score + extra;4}56const nextScore→ 25 = addBonus(20, bonus5);7const report→ score=25 = "score=" + nextScore25;89console.log("bonus=" + bonus5);10console.log("report=" + reportscore=25);outputbonus=5 report=score=25
bonus ← 10
1const bonus→ 10 = 10;2function addBonus(score, extra) {3 return score + extra;4}56const nextScore = addBonus(20, bonus10);7const report = "score=" + nextScore;function addBonus(score, extra)
1const bonus = 10;2function addBonus(score20, extra10) {3 return score + extra10;4}nextScore ← 30, report ← score=30
3 return score + extra;4}56const nextScore→ 30 = addBonus(20, bonus10);7const report→ score=30 = "score=" + nextScore30;89console.log("bonus=" + bonus10);10console.log("report=" + reportscore=30);outputbonus=10 report=score=30