ノーマルモードのお節介
上級者でもシンタックスチェック代わりに、「アクション」パネルを「エキスパートモード」から「ノーマルモード」に切換えるという方は少なくないと思います(筆者もそのひとり)。そうするとこの「ノーマルモード」、たまに、というよりはよく余計なお節介をしてくれます。
匿名関数を全部1行にしてくれるなどというのは、まだ可愛い方。見にくいのさえ我慢すれば、動作には問題ありません。ところが、このgetVersion()は、「ノーマルモード」にした途端()が消えてしまって、動作しません(Flash 5.0/Windowsおよび5.0a/Macintosh)。
[エキスパートモード]
trace(getVersion());
↓
[ノーマルモード]
trace(getVersion);
getVersionにシンタックスのブルーがついているので大丈夫かと「ムービープレビュー」すると、出力ウィンドウには何も表示されません。
改めて()を付け直す?
とりあえず、「ノーマルモード」で改めて()を付け直せば、それが消えてしまうことはありません。でも、また「エキスパートモード」に戻ってしまうと同じことです。これは、「エキスパートモード」と「ノーマルモード」を切換えながらスクリプトを書く方にとっては、不便極まりません。ひとつの対応法は、グローバルプロパティ$versionを使うことです。
$versionは、Flash Player 4.0r11で採用された特別な変数です。getVersion()関数は、この$versionの値を評価して返しています(Macromedia TechNote「Detecting Flash Player version information with $version」参照)。ただ、$versionプロパティは、「ActionScript辞書」に記載がありません。Flash 5.0からは、使用禁止の扱いのようです(Collim Moock『ActionScript: The Definitive Guide』O'REILLY)。$versionは、メインのタイムラインのプロパティです。したがって、_root.$versionという記述でアクセスします。
もっとgetVersion
getVerionの()が取れると、Flashではどう認識されているのか気になりますか? ここまで読んだ方なら、きっと気になるはずです。Flashでは、未定義変数と看做されているようです。これは、typeof演算子で調べればわかります。
trace (typeof(getVersion));
//出力ウィンドウの結果
undefined
undefinedは、値を設定していない変数をtypeofで調べたときに返される結果です。つまり、()なしのgetVersionには、値が設定されていない、あるいは未定義であることを意味しています。
ここまで、「ムービープレビュー」でいろいろ調べてきました。それで、ふと「ActionScript辞書」を見ますと、getVersion「関数はムービープレビューモードでは機能せず」などと、これまでの努力を否定するかのような説明がありました。これは誤りです。ActionScript Dictionary(ActionScript辞書英文改訂版)では、この記述は削除されています。これもマニュアルバグだったのでしょう。