Courtesy Implmentation



I have a great deal of respect and admiration of Martin Fowler. I read his blog and try to absorb as many of his talks as possible.

While reading his blog one day, I found his post on the Courtesy Implementation. The first time through, my mind went wonky on me. After a brief mental tussle over over who is smarter, me or Martin Fowler, I considered that I should give it another look. It started to make more sense, but I knew I wasn't going to completely click until I coded it up.

I think part of my confusion is that Martin did his implementation in Ruby - which I don't have any experience with. I implemented it in Javascript and everything just clicked.

'use strict';

// box
class box {
    constructor () {
        this.children = [];  
    }

    addChild (child) {
        this.children.push (child);
        console.log('added ' + child.name);
    }

    num_elephants () {
        var result = 0;

        for (var value of this.children) {
            console.log (value);
            result += value.num_elephants();
        }

        return result;
    }
}   

// elephant
class elephant {
    constructor (name) {
        this.name = name;
    }

    num_elephants () {
        return 1;
    }
}

The reason I'm writing it here is because I wanted to get the message out more.

ALL GLORY TO THE COURTESY IMPLEMENTATION!!!

Comments

Popular posts from this blog

A Working Vacation

Integrated Windows Authentication with Chrome and Firefox

Planned System Downtime