AfterEffectsのエクスプレッションはJavascriptのエンジンを使用しているので、Javascriptの文法に従うことになります。
Javascriptの仕様を公開している JavaScript | MDN のサンプルソースには、行末にセミコロンがついています。
しかし、エクスプレッションでは、行末にセミコロンをつけなくても動作します。
一体どちらが正しいのか?ということで、今回は本当にセミコロンが必要かどうかについて調べてみましたので説明していきたいと思います。
動作の違いを確認
[テキストレイヤー] – [テキスト] – [ソーステキスト] のエクスプレッションに、セミコロンあり、なしの2パターンで記述してみます。セミコロンあり
var a = 1;
var b = 1;
if(a == 1){
b = 2;
}
b;
画面上に「2」が表示されます。
セミコロンなし
var a = 1
var b = 1
if(a == 1){
b = 2
}
b
こちらもエラーが無く、画面上に「2」が表示されます。
結果、どちらも正しく動作しました。それでは、セミコロンが無いのに、何故エラーにならないのでしょうか?
調べた結果
色々調べた結果、以下の記事に答えが書いてありました。
ASI(Automatic semicolon insertion)という機能により、自動的にセミコロンを挿入している為に、セミコロンが無くても動作していることがわかりました。
また、セミコロンを自動的に挿入するルールも上記リンク先に明確に記載されています。
結論
「エクスプレッション行末のセミコロンはつけてもつけなくてもよい」とうことになります。
ただし、ASIによるセミコロン自動挿入ルールを理解していることが前提ですので、当ブログとしては以下のルールがおすすめです。
- 一行であればセミコロンをつけてもつけなくてもよい
- 複数行の場合はセミコロンをつける
以下におすすめルールの例を記載します。
セミコロンをつけてもつけなくてもよい例
wiggle(0.5, 100)
セミコロンをつける例
var nFreq = 0.5;
var nAmp = 100;
wiggle(nFreq, nAmp);
まとめ
今回の調査で、セミコロンを付けない場合は、自動的にセミコロンが挿入されるため、正常に動作していることがわかりました。
ASIの仕様を見ると、変則的な書き方をしなければ、セミコロンをつけなくてもほとんどのケースで意図したとおりに動作しそうです。
ただ、当ブログでは、より確実に記述するために、先ほどのルールに従ってセミコロンをつけていきたいと思います。