Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Duck Typing, Compatibility, and the Adaptor Pat...

Duck Typing, Compatibility, and the Adaptor Pattern

Nordic JS, 2014

Reg Braithwaite

September 12, 2014

Transcript

150 slides
  1. StandardCell.prototype.neighbours = function neighbours (neighbours) { return this._neighbours; }; StandardCell.prototype.setNeighbours

    = function setNeighbours (neighbours) { this._neighbours = neighbours.slice(0); return this; };
  2. StandardCell.prototype.nextAlive = function nextAlive () { var alives = this._neighbours.filter(function

    (n) { return n.alive(); }).length; if (this.alive()) { return alives === 2 || alives == 3; } else { return alives == 3; } };
  3. Universe.prototype.iterate = function iterate () { var aliveInNextGeneration = this.cells().map(

    function (c) { return [c, c.nextAlive()]; } ); aliveInNextGeneration.forEach(function (a) { var cell = a[0], next = a[1]; cell.setAlive(next); }); };
  4. View.prototype.drawCell = function drawCell (cell, x, y) { var xPlus

    = x + this.cellSize(), yPlus = y + this.cellSize() this._canvasContext.clearRect(x, y, xPlus, yPlus); this._canvasContext.fillStyle = this.cellColour(cell); this._canvasContext.fillRect(x, y, xPlus, yPlus); return self; };
  5. function ColourCell () { this._neighbours = []; this._age = 0;

    } ColourCell.prototype.neighbours = StandardCell.prototype.neighbours; ColourCell.prototype.setNeighbours = StandardCell.prototype.setNeighbours;
  6. ColourCell.prototype.nextAge = function next () { var alives = this._neighbours.filter(function

    (n) { return n.age() > 0; }).length; if (this.age() > 0) { return (alives === 2 || alives == 3) ? (this.age() + 1) : 0; } else { return (alives == 3) ? (this.age() + 1) : 0; } };
  7. Universe.prototype.iterate = function iterate () { var ageInNextGeneration = this.cells().map(

    function (c) { return [c, c.nextAge()]; } ); ageInNextGeneration.forEach(function (a) { var cell = a[0], next = a[1]; cell.setAge(next); }); };
  8. var COLOURS = [ BLACK, GREEN, BLUE, YELLOW, WHITE, RED

    ]; View.prototype.cellColour = function cellColour (cell) { return COLORS[ (cell.age() >= COLOURS.length) ? (COLOURS.length - 1) : cell.age() ]; }; // ...
  9. AsStandard.prototype.neighbours = function neighbours () { return this._colouredCell.neighbours(); }; AsStandard.prototype.setNeighbours

    = function setNeighbours (neighbours) { this._colouredCell.setNeighbours(neighbours); return this; };

More Decks by Reg Braithwaite

Other Decks in Programming