JavaScript tuple

Gjs では関数の戻り値を配列で2つ以上受け取ることができる。
Python 等の言語仕様に tuple がある言語では常識なのだが。
というか、JavaScript の配列って型が違っても問題ないのね。

Python

#!/usr/bin/env python3

def get_tuple():
    return "CBR", 1000, "RR"

name, cc, ext = get_tuple()
print("{}{}{}".format(name, cc, ext))

Gjs

#!/usr/bin/env gjs

let get_tuple = function() {
    return ["CBR", 1000, "RR"];
}

let [name, cc, ext] = get_tuple();
print(name + cc + ext)

これって Web ページにも使えるのかな?
実験、2014.03.15 現在の最新環境にて。

Google Chrome 33
iPhone 5S Safari
iPhone 5S Google Chrome
FireFox 27
Internet Explorer 11

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tuple Test</title>
<script type="application/javascript"><!--
var get_tuple = function() {
    var name = "iPhone";
    var num  = 6;
    return [true, name, num];
}
function init() {
    var arr = get_tuple();
    if (arr[0]) {
        document.write(arr[1] + arr[2]);
    }
}
//-->
</script>
</head>

<body onLoad="init()">
</body>
</html>

上記ブラウザ全部で関数の戻り値に配列を指定することができた。
しかし tuple のように戻り値を受け入れてくれるのは FireFox のみ。
Gjs は Firefox のエンジンを使っているので同様のようです。

しかし現在のトレンドは書くまでもなくスマートフォン。
Google Chrome, Safari で利用できないのでは使えない。
配列として受け入れるしか選べない。

JavaScript の Array は型が違ってもいいし関数の戻り値にできる。
それを利用すれば構造体を戻す関数やタプルのように扱える、ということで。
今後は解らないけど2つ以上の戻り値が必要な場合はこんな感じにすると便利。

ついでに let について。
FireFox で let 等の JavaScript 1.7 の機能を使うには 1.7 宣言が現時点では必須。
JavaScript 1.7 の新機能 – JavaScript | MDN

<script type="application/javascript;version=1.7"><!--
let get_tuple = function() {
    return ["FireFox", "JavaScript", 1.7];
}
function init() {
    let [name, js, version] = get_tuple();
    document.write(name + js + version)
}
//-->
</script>

Internet Explorer 11 はなんと let 等もそのまま利用可能。
ただしコチラは version=1.7 を書くと動作しない。

<script type="application/javascript"><!--
let get_tuple = function() {
    return ["Internet", "Explorer", 11];
}
function init() {
    let arr = get_tuple();
    document.write(arr.join(" "));
}
//-->
</script>

統一されるまで使い物にならないや。