先日のもくもく会#2に合わせて作ったレジュメですが、ボチボチ解答例を上げていきます。興味のある方はトライしてみてください。
というわけで、まずは機能1「動作するInDesignのバージョンを指定する」です。
(function (){ var versionLimit = 8; if (parseInt(app.version, 10) < versionLimit){ alert("InDesignが対応バージョンではありません"); exit(); } })();
この関数を、スクリプトの冒頭に記述すればOKです。
ただあくまでも解答例であって、これが最善の模範解答というわけではないです。あしからず。とはいえExtendScript初級者くらいの方には分かりやすくしたつもりです。
今回は例として「CS6以上で動作する」という仕様にしてみました。
app.version
はスクリプトが動作しているアプリケーションのバージョンを取得するもので、InDesignで実行しているのであればリビジョンを含めた数値が取得できます。今回は起動するメジャーバージョンを特定できればいいので、小数点以下のサブバージョンを無視します。そのためのparseInt
メソッドです。
parseInt
について詳しくはMDNなどちゃんとしたところを参照していただくとして、簡単な説明だけ。
parseInt
には2つの引数を渡します。正確には1つめが必須、2つめがオプションで省略可なわけですが、その性質上(私見でもありますが)2つの引数をきちんと渡してあげます。
parseInt
自体は、渡された第一引数を数値型に変換します。Int
とついているので、お察しの通り、小数点以下の数値は捨てられて整数値に丸められます。
数値に変換します、といっても、僕らが普段使っている十進数以外にも数の表し方はいくつもあるので、それを「N進数で変換して」と決めるのが第二引数です。今回は10
を渡しているので、parseInt
は10進数で変換してくれます。この第二引数を省略すると、メソッド自体は「原則として十進数」で変換します。第二引数を省略した場合はメソッド任せになってしまうわけです。parseInt
には必ず第二引数まで渡してあげたほうがよりミスの少ないコードになる、と僕は考えています。そういう意味での「私見」でした。
if (parseInt(app.version, 10) < versionLimit){
この部分は、実行しているアプリケーション(InDesign)が仮にCS5だとすると、変数versionLimit
には8
を代入していますので
if (7 < 8){
となり、式の評価はtrue
になります。そうするとalert
が実行され、exit
でスクリプトが終了する、という算段です。
形としては匿名関数にしています(functionをパーレンで括るやり方)が、煩わしければ普通に記述してもらってもいいと思います。要するに最初の行と最後の行を取っ払ってしまっても大丈夫です。その辺はお好みで。
バージョン評価の注意点としては、parseInt
だと整数値しか取れないので、CS5とCS5.5が区別できません。その場合は代わりにparseFloat
として浮動小数点が取得できます。もしCS5とCS5.5環境をお持ちであれば試してみてください。
また、exit
メソッドはInDesignが持つ特殊なメソッドです。IllustratorやPhotoshopでは動作しませんのでお気をつけください。
最後に、説明抜きに自分が使う場合の短いバージョンを置いておきます。実際には変数を使わず下記のように記述することが多いです。ご参考まで。
if (parseInt(app.version, 10) < 8) exit();