A tárátadó stílus egy programozási módszer, amit változó állapot nélkül változó állapot modellezésére használnak.
Példaként tekintsük ezt a JavaScript programot, ami nem tárátadó stílusban készült:
var lastWasA = false
// a treebin represents a binary tree of strings.
// a treebin is either // - a string, or // - {l : <treebin>, r: <treebin>}
// does an in-order traversal of this tree's // leaves contain an 'a' followed by a 'b'? function aThenB(treebin) { if (typeof(treebin) === "string") { if (treebin === "a") { lastWasA = true; return false; } else if (treebin === "b") { if (lastWasA) { return true;
} else { return false;
} else { // not a string, must be an internal node: return ((aThenB(treebin.l))||(aThenB(treebin.r)));
Ez hivatkozást tartalmaz egy globális változóra. Tárátadó stílusban a globális változó értéke minden hívásban átadódik, amit a következő hívás átvesz. Ez úgy nézhet ki, mint:
function aThenB(treebin, lastWasA) { if (typeof(treebin) === "string") { if (treebin === "a") { return {result: false, lastWasA: true}; } else if (treebin === "b") { if (lastWasA) { return {result: true, lastWasA: false};
} else { return {result: false, lastWasA: false};
} else { // not a string, must be an internal node: var leftCall = aThenB(treebin.l, lastWasA); if (leftCall.result) { return {result: true, lastWasA: false} } else { return aThenB(treebin.r, leftCall.lastWasA);
Jegyezzük meg, hogy minden hívás átvesz egy extra argumentumot, és két értéket ad vissza: a valódi visszatérési értéket, és a korábbi változó új állapotát.
Tárátadó stílusban írni nehézkes lehet, de segíthet kiküszöbölni versenyhelyzeteket azzal, hogy az állapot csak két függvényhívás között létezik, így a kód potenciálisan jobban párhuzamosítható. Jegyzetek
Fordítás
Kategória:Programtervezési minták