あいまいなTJSの配列サイズ
TJSのひどいはまりどころを発見してしまいました。今まで気づかなかったのが信じられません。TJSはArrayクラスもDictionaryクラスも貧弱ですが、貧弱なばかりでなく凶悪なことが判明しました。
例えばPerlの、次の2つの文は等価です。
print scalar((1,2,3))."\n"; print scalar((1,2,3,))."\n";
もちろん、実行結果は次のようになります。
3 3
個人的にはとても嫌いなPHPでも、
<? echo count(Array(1,2,3))."\n"; echo count(Array(1,2,3,))."\n"; ?>
3 3
納得のいく結果が得られました。
ところがTJSではどうでしょうか。
Debug.message([1,2,3].count); Debug.message([1,2,3,].count);
3 4
なんと、結果が異なってしまいます。配列の末尾にカンマを置いただけで、配列にカウントされてしまうようです。驚きです。配列の末尾にカンマを置くのが習慣になっているようなプログラマは、うっかりTJSでもカンマを置いてしまい、このcountプロパティを条件に用いたfor文などでは、インデックスの境界越えがいとも簡単に起きてしまいます。
この問題はおそらく、関数の引数が空列でも許される(f(,)
みたいな)ことによって引き起こされているのだと思います。
最後のカンマがそもそも文法エラーになってしまうJavaScriptとどちらがマシでしょうか…。