Disclaimer: I’ve never done *any* Clojure programming, but I’m curious.

Here’s how I may model an on-screen rectangle in JavaScript, a classless
object oriented language:

    let createRectangle = function (x, y, width, height) {
        return {
            get upperLeft() {
                return [x, y];
            },
            get lowerRight() {
                return [x + width, y + height];
            },
            get area() {
                return width * height;
            }
        };
    };

    let r = createRectangle(0, 0, 50, 20);
    let s = createRectangle(10, 20, 40, 5);
    console.log(r.upperLeft, r.lowerRight, r.area);
    console.log(s.upperLeft, s.lowerRight, s.area);

Now I run the profiler. I discover that in the inner loop of my program
there are lots of calls needing the upper left and the lower right
coordinates. So I change the inner workings of the object to store these
instead:

    let createRectangle = function (x, y, width, height) {
        let upperLeft = [x, y], lowerRight = [x + width, y + height];

        return {
            get upperLeft() {
                return upperLeft;
            },
            get lowerRight() {
                return lowerRight;
            },
            get area() {
                return (lowerRight[0] - upperLeft[0]) *
                    (lowerRight[1] - upperLeft[1]);
            }
        };
    };

Boom: Now the program is twice as fast, and - what gives me great
comfort - I know that this change breaks nothing. I only had to edit the
code in *one* module. I didn’t need to think too much about efficiency
of data structures in the beginning. I could just start going, then
optimize in the end.

*Can I program in a similar way using Clojure?*

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to