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>
統一されるまで使い物にならないや。