My original sequence generator had its status defined as a property, and as such visible by everybody who had access to the function itself. I decided that was bad, and I refactored it as a closure. Cool, but the client programmer needs to modify the sequence internal status, to be able to skip ahead of a few numbers when needed.
To achieve this result, we need to do a substantial change to our code:
var sequence = (function() { var current = 0; return { // 1 get: function() { // 2 return current++; }, skip: function(delta) { // 3 if(delta > 0) // 4 current += delta; } } }());1. The external anonymous function does not return anymore a single function, but an object containing a couple of properties, that happens to be functions.
2. The first property is named get, and it actually is our old sequence generator.
3. Here is the required improvement, a function named skip that changes the sequence generator internal status.
4. I didn't provide much error handling to the code, but I couldn't help to put at least this line, meant to avoid the user to move the sequence back and forth.
A use test for the new sequence:
for(var i = 0; i < 3; ++i) console.log(sequence.get()); // 1 sequence.skip(3); // 2 for(var i = 0; i < 3; ++i) console.log(sequence.get());1. Get each time a new sequence number, starting from zero.
2. Skip three numbers in the sequence, before getting more numbers.
No comments:
Post a Comment