JSX

出典: フリー百科事典『ウィキペディア(Wikipedia)』
JSX
パラダイム オブジェクト指向[1]
登場時期 2012年5月31日 (2012-05-31)[1]
設計者 DeNA, Co., Ltd.
開発者 DeNA, Co., Ltd.
評価版リリース 0.9.89 / 2014年5月20日 (9年前) (2014-05-20)[2]
型付け 静的型付け[1]
影響を受けた言語 JavaScript
プラットフォーム クロスプラットフォーム
ライセンス MIT License
ウェブサイト jsx.github.io
拡張子 .jsx
テンプレートを表示

JSX は、DeNAによって開発されたウェブアプリケーション向けのプログラミング言語である。ECMAScript 4から影響を受けた構文を持ち、静的型付けなのが特徴。ウェブブラウザ組み込みのスクリプト言語であるJavaScriptのデメリットを解消することを目的に作られている。またJSXのソースコードは最適化されたJavaScriptコードに変換して実行され、同等のJavaScriptプログラムと比較して10%以上高速になるとされる[3][1]

なお、Reactで用いられるJavaScriptの拡張構文や、Adobe社製ソフトウェアに搭載されているJavaScriptマクロは、同じく「JSX」という名前がつけられているが、全くの別物である。

言語仕様[編集]

JSXの特徴は以下の点が挙げられる。

  • クラス構文のサポート
  • モジュール機構
  • テンプレート(総称型)のサポート
  • 関数オーバーロードのサポート
  • アロー関数式
  • レキシカルスコープをもつthis
  • デフォルト引数
  • 最適化で削除されるassert文
  • プロファイラ(スマートフォンでも利用可能)
  • source mapのサポート
  • nullを許容しないプリミティブ型(number, boolean, string)

[編集]

Hello worldプログラムは、以下のとおりである[4]。JSXプログラムは _Main.main(:string[]) : void がアプリケーションのエントリポイントとなる。

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

JSXでは、継承関係にないクラスに総称的な操作をするためにはインターフェイスを使う。インターフェイスを使ったプログラムは以下のようになる[4]

// an example for class inheritance and interfaces

interface Flyable {
    abstract function fly() : void;
}

abstract class Animal {
    function eat() : void {
      log "An animal is eating!";
    }
}

class Bat extends Animal implements Flyable {
    override function fly() : void {
        log "A bat is flying!";
    }
}

abstract class Insect {
}

class Bee extends Insect implements Flyable {
    override function fly() : void {
        log "A bee is flying!";
    }
}

class _Main {
    static function main(args : string[]) : void {
        // fo bar
        var bat = new Bat();

        var animal : Animal = bat; // OK. A bat is an animal.
        animal.eat();

        var flyable : Flyable = bat; // OK. A bat can fly
        flyable.fly();

        // for Bee
        var bee = new Bee();

        flyable = bee; // A bee is also flyable
        flyable.fly();
    }
}

関連項目[編集]

脚注[編集]

外部リンク[編集]