静的型付けで生産性と品質が向上する理由
変数名やメソッドの存在をコンパイル時に検証できる
⁃ 全ての値は、代入するまで参照不可能
⁃以下のような JS でよくある現象と戦わなくていい
•
“Object foo has no method ’bar’”
•
“foo is not defined”
•
いつのまにか値が NaN
実行時にエラーチェックを行うことができる
⁃ 配列の未初期化要素へのアクセスを検出
⁃ デバッグビルドの場合のみ
JSX の現在と未来
11
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
12.
なぜ静的型付けを必須としたのか
型付けが Optionalなら JavaScript 上位互換なのに
⁃ 例: CoffeeScript, Google Closure Compiler
オプショナルな型付けの問題
⁃ 型付けがないコードが混在すると、コンパイル時の
エラーチェックが困難に
⁃ 安全な最適化やminifyができない
JSX の現在と未来
12
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
JSX のコード例(アフィン変換)
class Point{
var x : number, y : number;
function constructor(x : number, y : number) {
this.x = x;
this.y = y;
}
}
class Matrix {
var a11 : number, a12 : number, a13 : number
var a21 : number, a22 : number, a23 : number;
function constructor(a11 : number, a12 : number, (省略)) {
this.a11 = a11;
(省略)
}
function transform(pt : Point) : Point {
return new Point(
this.a11 * pt.x + this.a12 * pt.y + this.a13,
this.a21 * pt.x + this.a22 * pt.y + this.a23);
}
}
JSX の現在と未来
14
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
15.
JSX のコード例(アフィン変換)
JSXのソースコード:
new Matrix(1, 0, 0, 0, 2, 0).transform(new Point(x, y))
生成される JavaScript:
{x: x + 0 * y, y: 0 * x + 2 * y}
// Note: 0 * n cannot be folded since it is equiv. to: isNaN(n) ? NaN : 0
JSX の現在と未来
15
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.