引数と返り値(戻り値)が型付けできるようになりました。
print(twice(2)); //4
//2倍にして返す関数
function twice(a : int) : int {
return a * 2;
}
引数のaがintで、返り値もintになります。
引数の型が合っていないとコンパイルエラーです。
print(twice(2.1)); //型が一致しません。
返り値の型が合わないと例外が投げられます。
print(twice(2)); //例外発生
function twice(a : int) : int {
return a * 2.1;
}
もちろん型付けしなければ動作します。
print(twice(2)); //4.2
function twice(a) {
return a * 2.1;
}
値を返さないのもOKです。
twice(2);
function twice(a) : int {
;
}
通常モードでは関数オブジェクトの
arguments
プロパティは使えなくなりました。
その代わりに次のように可変個の引数を受け取ることができます。
max.js
------------------------------------------
print(max(2, 5, 4));
function max(... args : int[]) : int {
if(args.length < 1)
throw(1);
var maxelem = args[0];
for(var i = 1; i < args.length; i++) {
if(args[i] > maxelem)
maxelem = args[i];
}
return maxelem;
}
とにかく、上のように
... と書くと、
引数を配列として受け取ることができるようです。
test(2, 5, 4);
function test(a : int, ... args : int[]) : int {
print(a); //2
print(args.length); //2
}
このように配列以外の引数と混合して使うこともできます。
ただし、配列は最後の引数でなければなりません。
この辺はPerlと同じですね。
ユーザ定義オブジェクトは残っています。
ただし、クラスに移行すべきでしょう。
var a = new Person("あさ美", "カプチーノ");
var b = new Person("あゆみ", "マルガリータ");
print(a.ToString()); //あさ美カプチーノ
function Person(name : String, wname : String) {
this.name = name;
this.wname = wname;
this.ToString = function () { return this.name + this.wname; }
}
プロパティやメソッドを追加することもできます。
calQ.js
----------------------------------------------------------
...
a.kcal = 20000;
a.Print = function() {
print("カロリークイーン " + this.kcal + "kcal突破!");
}
a.Print();
関数の多重定義は、警告は出ますができるようです。
multi_max.js
-----------------------------------------------
print(add(1, 2)); //3
print(add(1, 2, 3)); //6
function add(a : int, b : int) : int {
return a + b;
}
function add(a : int, b : int, c : int) : int {
return a + b + c;
}
1行目は上のmaxを、2行目は下のmaxを使っているようです。