Archive for the ‘JavaScript’ Category

  1. Hello, Haxe World!

    Posted on 3月 21st, 2013 by cx20

    Haxe

    Haxe は静的型付けを特徴としたオブジェクト指向言語である。Neko VM 形式の他、JavaScript、C++、PHP、Java、C# 等に変換することが可能となっている。

    ソースコード(Haxe)

    class Hello {
        static function main() {
            trace("Hello, Haxe World!");
        }
    }

    上記コードを JavaScript に変換した場合、以下のコードが生成される。

    ソースコード(JavaScript)

    var Hello = function() { }
    Hello.__name__ = true;
    Hello.main = function() {
        console.log("Hello, Haxe World!");
    }
    var HxOverrides = function() { }
    HxOverrides.__name__ = true;
    HxOverrides.dateStr = function(date) {
        var m = date.getMonth() + 1;
        var d = date.getDate();
        var h = date.getHours();
        var mi = date.getMinutes();
        var s = date.getSeconds();
        return date.getFullYear() + "-" + (m < 10?"0" + m:"" + m) + "-" + (d < 10?"0" + d:"" + d) + " " + (h < 10?"0" + h:"" + h) + ":" + (mi < 10?"0" + mi:"" + mi) + ":" + (s < 10?"0" + s:"" + s);
    }
    HxOverrides.strDate = function(s) {
        switch(s.length) {
        case 8:
            var k = s.split(":");
            var d = new Date();
            d.setTime(0);
            d.setUTCHours(k[0]);
            d.setUTCMinutes(k[1]);
            d.setUTCSeconds(k[2]);
            return d;
        case 10:
            var k = s.split("-");
            return new Date(k[0],k[1] - 1,k[2],0,0,0);
        case 19:
            var k = s.split(" ");
            var y = k[0].split("-");
            var t = k[1].split(":");
            return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]);
        default:
            throw "Invalid date format : " + s;
        }
    }
    HxOverrides.cca = function(s,index) {
        var x = s.charCodeAt(index);
        if(x != x) return undefined;
        return x;
    }
    HxOverrides.substr = function(s,pos,len) {
        if(pos != null && pos != 0 && len != null && len < 0) return "";
        if(len == null) len = s.length;
        if(pos < 0) {
            pos = s.length + pos;
            if(pos < 0) pos = 0;
        } else if(len < 0) len = s.length + len - pos;
        return s.substr(pos,len);
    }
    HxOverrides.remove = function(a,obj) {
        var i = 0;
        var l = a.length;
        while(i < l) {
            if(a[i] == obj) {
                a.splice(i,1);
                return true;
            }
            i++;
        }
        return false;
    }
    HxOverrides.iter = function(a) {
        return { cur : 0, arr : a, hasNext : function() {
            return this.cur < this.arr.length;
        }, next : function() {
            return this.arr[this.cur++];
        }};
    }
    var IntIter = function(min,max) {
        this.min = min;
        this.max = max;
    };
    IntIter.__name__ = true;
    IntIter.prototype = {
        next: function() {
            return this.min++;
        }
        ,hasNext: function() {
            return this.min < this.max;
        }
        ,__class__: IntIter
    }
    var Std = function() { }
    Std.__name__ = true;
    Std["is"] = function(v,t) {
        return js.Boot.__instanceof(v,t);
    }
    Std.string = function(s) {
        return js.Boot.__string_rec(s,"");
    }
    Std["int"] = function(x) {
        return x | 0;
    }
    Std.parseInt = function(x) {
        var v = parseInt(x,10);
        if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) v = parseInt(x);
        if(isNaN(v)) return null;
        return v;
    }
    Std.parseFloat = function(x) {
        return parseFloat(x);
    }
    Std.random = function(x) {
        return Math.floor(Math.random() * x);
    }
    var js = js || {}
    js.Boot = function() { }
    js.Boot.__name__ = true;
    js.Boot.__unhtml = function(s) {
        return s.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
    }
    js.Boot.__trace = function(v,i) {
        var msg = i != null?i.fileName + ":" + i.lineNumber + ": ":"";
        msg += js.Boot.__string_rec(v,"");
        var d;
        if(typeof(document) != "undefined" && (d = document.getElementById("haxe:trace")) != null) d.innerHTML += js.Boot.__unhtml(msg) + "<br/>"; else if(typeof(console) != "undefined" && console.log != null) console.log(msg);
    }
    js.Boot.__clear_trace = function() {
        var d = document.getElementById("haxe:trace");
        if(d != null) d.innerHTML = "";
    }
    js.Boot.isClass = function(o) {
        return o.__name__;
    }
    js.Boot.isEnum = function(e) {
        return e.__ename__;
    }
    js.Boot.getClass = function(o) {
        return o.__class__;
    }
    js.Boot.__string_rec = function(o,s) {
        if(o == null) return "null";
        if(s.length >= 5) return "<...>";
        var t = typeof(o);
        if(t == "function" && (o.__name__ || o.__ename__)) t = "object";
        switch(t) {
        case "object":
            if(o instanceof Array) {
                if(o.__enum__) {
                    if(o.length == 2) return o[0];
                    var str = o[0] + "(";
                    s += "t";
                    var _g1 = 2, _g = o.length;
                    while(_g1 < _g) {
                        var i = _g1++;
                        if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); else str += js.Boot.__string_rec(o[i],s);
                    }
                    return str + ")";
                }
                var l = o.length;
                var i;
                var str = "[";
                s += "t";
                var _g = 0;
                while(_g < l) {
                    var i1 = _g++;
                    str += (i1 > 0?",":"") + js.Boot.__string_rec(o[i1],s);
                }
                str += "]";
                return str;
            }
            var tostr;
            try {
                tostr = o.toString;
            } catch( e ) {
                return "???";
            }
            if(tostr != null && tostr != Object.toString) {
                var s2 = o.toString();
                if(s2 != "[object Object]") return s2;
            }
            var k = null;
            var str = "{n";
            s += "t";
            var hasp = o.hasOwnProperty != null;
            for( var k in o ) { ;
            if(hasp && !o.hasOwnProperty(k)) {
                continue;
            }
            if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
                continue;
            }
            if(str.length != 2) str += ", n";
            str += s + k + " : " + js.Boot.__string_rec(o[k],s);
            }
            s = s.substring(1);
            str += "n" + s + "}";
            return str;
        case "function":
            return "<function>";
        case "string":
            return o;
        default:
            return String(o);
        }
    }
    js.Boot.__interfLoop = function(cc,cl) {
        if(cc == null) return false;
        if(cc == cl) return true;
        var intf = cc.__interfaces__;
        if(intf != null) {
            var _g1 = 0, _g = intf.length;
            while(_g1 < _g) {
                var i = _g1++;
                var i1 = intf[i];
                if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
            }
        }
        return js.Boot.__interfLoop(cc.__super__,cl);
    }
    js.Boot.__instanceof = function(o,cl) {
        try {
            if(o instanceof cl) {
                if(cl == Array) return o.__enum__ == null;
                return true;
            }
            if(js.Boot.__interfLoop(o.__class__,cl)) return true;
        } catch( e ) {
            if(cl == null) return false;
        }
        switch(cl) {
        case Int:
            return Math.ceil(o%2147483648.0) === o;
        case Float:
            return typeof(o) == "number";
        case Bool:
            return o === true || o === false;
        case String:
            return typeof(o) == "string";
        case Dynamic:
            return true;
        default:
            if(o == null) return false;
            if(cl == Class && o.__name__ != null) return true; else null;
            if(cl == Enum && o.__ename__ != null) return true; else null;
            return o.__enum__ == cl;
        }
    }
    js.Boot.__cast = function(o,t) {
        if(js.Boot.__instanceof(o,t)) return o; else throw "Cannot cast " + Std.string(o) + " to " + Std.string(t);
    }
    if(Array.prototype.indexOf) HxOverrides.remove = function(a,o) {
        var i = a.indexOf(o);
        if(i == -1) return false;
        a.splice(i,1);
        return true;
    }; else null;
    Math.__name__ = ["Math"];
    Math.NaN = Number.NaN;
    Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
    Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
    Math.isFinite = function(i) {
        return isFinite(i);
    };
    Math.isNaN = function(i) {
        return isNaN(i);
    };
    String.prototype.__class__ = String;
    String.__name__ = true;
    Array.prototype.__class__ = Array;
    Array.__name__ = true;
    Date.prototype.__class__ = Date;
    Date.__name__ = ["Date"];
    var Int = { __name__ : ["Int"]};
    var Dynamic = { __name__ : ["Dynamic"]};
    var Float = Number;
    Float.__name__ = ["Float"];
    var Bool = Boolean;
    Bool.__ename__ = ["Bool"];
    var Class = { __name__ : ["Class"]};
    var Enum = { };
    var Void = { __ename__ : ["Void"]};
    Hello.main();

    実行方法(Neko VM による実行例)

    C:¥> haxe -main Hello -neko Hello.n
    C:¥> neko Hello.n

    実行方法(Node.js による実行例)

    C:¥> haxe -main Hello -js Hello.js
    C:¥> node Hello.js

    実行結果

    Hello, Haxe World!
  2. Hello, JSX World!

    Posted on 3月 20th, 2013 by cx20

    JSX

    JSX は DeNA により開発された静的型付けを特徴としたスクリプト言語である。JavaScript にコンパイルすることが可能となっている。

    ソースコード(JSX)

    class _Main {
        static function main(args : string[]) :void {
            log "Hello, JSX World!";
        }
    }

    上記コードを JavaScript にコンパイルした場合、以下のコードが生成される。

    ソースコード(JavaScript)

    #!/usr/local/Cellar/node/0.6.6/bin/node
    // generatedy by JSX compiler 0.9.2 (2013-01-30 11:14:28 +0900; 1a8b01b71633517541daa97862da204a2005c8aa)
    var JSX = {};
    (function () {
     
    /**
     * copies the implementations from source interface to target
     */
    function $__jsx_merge_interface(target, source) {
    	for (var k in source.prototype)
    		if (source.prototype.hasOwnProperty(k))
    			target.prototype[k] = source.prototype[k];
    }
     
    /**
     * defers the initialization of the property
     */
    function $__jsx_lazy_init(obj, prop, func) {
    	function reset(obj, prop, value) {
    		delete obj[prop];
    		obj[prop] = value;
    		return value;
    	}
     
    	Object.defineProperty(obj, prop, {
    		get: function () {
    			return reset(obj, prop, func());
    		},
    		set: function (v) {
    			reset(obj, prop, v);
    		},
    		enumerable: true,
    		configurable: true
    	});
    }
     
    /**
     * sideeffect().a /= b
     */
    function $__jsx_div_assign(obj, prop, divisor) {
    	return obj[prop] = (obj[prop] / divisor) | 0;
    }
     
    /*
     * global functions called by JSX
     * (enamed so that they do not conflict with local variable names)
     */
    var $__jsx_parseInt = parseInt;
    var $__jsx_parseFloat = parseFloat;
    var $__jsx_isNaN = isNaN;
    var $__jsx_isFinite = isFinite;
     
    var $__jsx_encodeURIComponent = encodeURIComponent;
    var $__jsx_decodeURIComponent = decodeURIComponent;
    var $__jsx_encodeURI = encodeURI;
    var $__jsx_decodeURI = decodeURI;
     
    var $__jsx_ObjectToString = Object.prototype.toString;
    var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty;
     
    /*
     * profiler object, initialized afterwards
     */
    function $__jsx_profiler() {
    }
     
    /*
     * public interface to JSX code
     */
    JSX.require = function (path) {
    	var m = $__jsx_classMap[path];
    	return m !== undefined ? m : null;
    };
     
    JSX.profilerIsRunning = function () {
    	return $__jsx_profiler.getResults != null;
    };
     
    JSX.getProfileResults = function () {
    	return ($__jsx_profiler.getResults || function () { return {}; })();
    };
     
    JSX.postProfileResults = function (url) {
    	if ($__jsx_profiler.postResults == null)
    		throw new Error("profiler has not been turned on");
    	return $__jsx_profiler.postResults(url);
    };
     
    JSX.resetProfileResults = function () {
    	if ($__jsx_profiler.resetResults == null)
    		throw new Error("profiler has not been turned on");
    	return $__jsx_profiler.resetResults();
    };
    /**
     * class _Main extends Object
     * @constructor
     */
    function _Main() {
    }
     
    _Main.prototype = new Object;
    /**
     * @constructor
     */
    function _Main$() {
    };
     
    _Main$.prototype = new _Main;
     
    /**
     * @param {Array.<undefined|!string>} args
     */
    _Main.main$AS = function (args) {
    	console.log("Hello, JSX World!");
    };
     
    var _Main$main$AS = _Main.main$AS;
     
    var $__jsx_classMap = {
    	"hello.jsx": {
    		_Main: _Main,
    		_Main$: _Main$
    	}
    };
     
     
    /**
     * launches _Main.main(:string[]):void invoked by jsx --run|--executable
     */
    JSX.runMain = function (sourceFile, args) {
    	var module = JSX.require(sourceFile);
     
    	if (! module._Main) {
    		throw new Error("entry point _Main not found in " + sourceFile);
    	}
    	if (! module._Main.main$AS) {
    		throw new Error("entry point _Main.main(:string[]):void not found in " + sourceFile);
    	}
    	module._Main.main$AS(args);
    };
     
    /**
     * launches _Test#test*():void invoked by jsx --test
     */
    JSX.runTests = function (sourceFile, tests) {
    	var module = JSX.require(sourceFile);
    	var testClass = module._Test$;
     
    	if (!testClass) return; // skip if there's no test class
     
    	if(tests.length === 0) {
    		var p = testClass.prototype;
    		for (var m in p) {
    			if (p[m] instanceof Function
    				&& /^test.*[$]$/.test(m)) {
    				tests.push(m);
    			}
    		}
    	}
    	else { // set as process arguments
    		tests = tests.map(function (name) {
    			return name + "$"; // mangle for function test*():void
    		});
    	}
     
    	var testCase = new testClass();
     
    	if (testCase.beforeClass$AS != null)
    		testCase.beforeClass$AS(tests);
     
    	for (var i = 0; i < tests.length; ++i) {
    		(function (method) {
    			if (method in testCase) {
    				testCase.run$SF$V$(method, function() { testCase[method](); });
    			}
    			else {
    				throw new ReferenceError("No such test method: " + method);
    			}
    		}(tests[i]));
    	}
     
    	if (testCase.afterClass$ != null)
    		testCase.afterClass$();
    };
    JSX.runMain("hello.jsx", process.argv.slice(2))
    })();

    実行方法(JSX による実行例)

    C:¥> jsx --run hello.jsx

    実行方法(Node.js による実行例)

    $ jsx --executable node --output hello.jsx.js hello.jsx
    $ node hello.jsx.js

    実行結果

    Hello, JSX World!
  3. Hello, Java 3D(Rhino) World!

    Posted on 12月 24th, 2012 by cx20

    Java 3D(Rhino)

    Java 3DJava による 3D グラフィックライブラリである。
    以下は Rhino による Java 3D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
    importPackage(javax.media.j3d);
    importPackage(javax.vecmath);
    importPackage(com.sun.j3d.utils.universe);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    var canvas3D = createCanvas3D(frame);
    var scene = createSceneGraph();
    connect(canvas3D, scene);
     
    frame.setVisible(true);
     
    function createCanvas3D( frame ) {
        frame.getContentPane().setLayout(new BorderLayout());
        var config = SimpleUniverse.getPreferredConfiguration();
        var canvas3D = new Canvas3D(config);
        frame.getContentPane().add(canvas3D);
        return canvas3D;
    }
     
    function createSceneGraph() {
        var objRoot = new BranchGroup();
        var mover = moveTextBack();
        var spinner = createSpinner();
        var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0, Math.PI * 2);
        rotator.setSchedulingBounds( new BoundingSphere() );
        spinner.addChild(rotator);
        objRoot.addChild(mover);
        mover.addChild(spinner);
        spinner.addChild( createTextShape());
        setLighting(mover);
        return objRoot;
    }
     
    function createSpinner() {
        var spinner = new TransformGroup();
        spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        return spinner;
    }
     
    function moveTextBack() {
        var transform3D = new Transform3D();
        transform3D.setTranslation(new Vector3f(0.0, 0.0, -10.0));
        return new TransformGroup(transform3D);
    }
     
    function createTextShape() {
        var textAppear = new Appearance();
        textAppear.setMaterial(new Material());
        var font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion());
        var textGeom = new Text3D(font3D, new String("Hello, Java 3D World!"));
        textGeom.setAlignment(Text3D.ALIGN_CENTER);
        var textShape = new Shape3D();
        textShape.setGeometry(textGeom);
        textShape.setAppearance(textAppear);
        return textShape;
    }
     
    function setLighting( objMove ) {
        var light = new DirectionalLight();
        light.setInfluencingBounds(new BoundingSphere());
        light.setDirection(new Vector3f(0.0,0.0,-1.0));
        light.setColor(new Color3f(1.0, 1.0, 1.0));
        objMove.addChild(light);
    }
     
    function connect( canvas3D, scene ) {
        var universe = new SimpleUniverse(canvas3D);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  4. Hello, Java 2D(Rhino) World!

    Posted on 12月 23rd, 2012 by cx20

    Java 2D(Rhino)

    Java 2D は Java による 2D グラフィックライブラリである。
    以下は Rhino による Java 2D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    canvas = new Canvas();
     
    frame.add(canvas);
    frame.setVisible(true);
     
    canvas.createBufferStrategy(2);
    strategy = canvas.getBufferStrategy();
    g2 = strategy.getDrawGraphics();
    while(true)
    {
        g2.drawString("Hello, Java 2D World!", 0, 16 );
        strategy.show();
        java.lang.Thread.sleep(200);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    コンパイル&実行方法

    C:¥> jrunscript hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. Hello, SWT(Rhino) World!

    Posted on 12月 21st, 2012 by cx20

    SWT(Rhino)

    SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
    IBM により AWT や Swing を置き換える目的で作成された。
    以下は Rhino による SWT の使用例となっている。

    ソースコード

    importPackage(org.eclipse.swt);
    importPackage(org.eclipse.swt.widgets);
    importPackage(org.eclipse.swt.layout);
     
    var display = new Display();
    var shell = new Shell(display);
    shell.setText("Hello, World");
     
    var layout = new FillLayout(SWT.VERTICAL);
    shell.setLayout(layout);
     
    var label = new Label(shell,SWT.BORDER);
    label.setText("Hello, SWT World!");
     
    shell.setSize( 640, 480 );
    shell.open();
     
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
     
    display.dispose();

    実行方法

    C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, SWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. Hello, Swing(Rhino) World!

    Posted on 12月 20th, 2012 by cx20

    Swing(Rhino)

    Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
    以下は Rhino による Swing の使用例となっている。

    ソースコード

    importPackage(javax.swing);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    var label = new JLabel("Hello, AWT World!");
    label.setVerticalAlignment(JLabel.TOP);
    frame.add(label);
    frame.setVisible(true);
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Swing World!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. Hello, AWT(Rhino) World!

    Posted on 12月 19th, 2012 by cx20

    AWT(Rhino)

    AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
    以下は Rhino による AWT の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(java.awt.event);
     
    var frame = new Frame();
    frame.setTitle("Hello, World");
    frame.addWindowListener(function(e, methodName) {
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            java.lang.System.exit(0);
        }
    });
    frame.setSize(640,480);
    frame.setLayout(new FlowLayout(FlowLayout.LEFT));
     
    var label = new Label("Hello, AWT World!");
    frame.add(label);
    frame.setVisible(true);
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, AWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. Hello, TypeScript World!

    Posted on 10月 31st, 2012 by cx20

    TypeScript

    TypeScript はマイクロソフト社により開発された静的型付けを特徴としたスクリプト言語である。JavaScript にコンパイルすることが可能となっている。
    プログラムは TypeScript の公式サイト(http://www.typescriptlang.org/Playground/)で試すことができる。

    ソースコード(TypeScript)

    class HelloWorld {
        message: string;
        constructor(message: string) {
            this.message = message;
        }
        sayHello() {
            console.log("Hello, " + this.message + " World!");
        }
    }
     
    var hello = new HelloWorld("TypeScript");
    hello.sayHello();

    上記コードを JavaScript にコンパイルした場合、以下のコードが生成される。

    ソースコード(JavaScript)

    var HelloWorld = (function () {
        function HelloWorld(message) {
            this.message = message;
        }
        HelloWorld.prototype.sayHello = function () {
            console.log("Hello, " + this.message + " World!");
        };
        return HelloWorld;
    })();
    var hello = new HelloWorld("TypeScript");
    hello.sayHello();

    コンパイル方法

    C:¥> tsc hello.ts

    実行方法(Node.js による実行例)

    C:¥> node hello.js

    実行結果

    Hello, TypeScript World!
  9. Hello, ADO(JScript) World!

    Posted on 9月 16th, 2012 by cx20

    ADO(JScript)

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    ソースコード(JScript + ADO + OLEDB + Jet データベース)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.\hello.mdb" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

    ソースコード(JScript + ADO + OLEDB + ACE データベース)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.\hello.accdb" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + OLEDB + SQL Server)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

    ソースコード(JScript + ADO + OLEDB + Oracle)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + SQL Server)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={SQL Server};SERVER=(local);DATABASE=master", "sa", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + Oracle)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={Microsoft ODBC for Oracle};Server=ORCL", "scott", "tiger" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    ソースコード(JScript + ADO + ODBC + MySQL)

    main();
     
    function main() {
        var cn = new ActiveXObject("ADODB.Connection");
        cn.Open( "PROVIDER=MSDASQL;Driver={MySQL ODBC 5.1 Driver};Server=localhost", "root", "P@ssW0rd" );
        var rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        cn.Close();
    }

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.js

    実行結果

    Message
    -----------------
    Hello, ADO World!
  10. Hello, DAO(JScript) World!

    Posted on 9月 15th, 2012 by cx20

    DAO

    DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
    長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(JScript + DAO + Jet データベース)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase("Hello.mdb");
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ACE データベース)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.120");
        var db = dbe.OpenDatabase("Hello.accdb");
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ODBC + SQL Server)

    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase( "", false, false, 
              "ODBC;Driver={SQL Server};"
            + "SERVER=(local);DATABASE=master;" 
            + "UID=sa;PWD=P@ssW0rd" );
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    ソースコード(JScript + DAO + ODBC + Oracle)

    var dbOpenSnapshot = 4;
    var dbSQLPassThrough = 64;
     
    main();
     
    function main() {
        var dbe = new ActiveXObject("DAO.DBEngine.36");
        var db = dbe.OpenDatabase( "", false, false, 
              "ODBC;Driver={Oracle in OraDb11g_home1};"
            + "DBQ=ORCL;" 
            + "UID=scott;PWD=tiger" );
        var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message");
        // パススルークエリの例(データベース側に依存する SQL を実行する場合)
        //var rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough );
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
     
        rs.Close();
        db.Close();
    }

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.js

    実行結果

    Message
    -----------------
    Hello, DAO World!