こんにちは、イマジカデジタルスケープの伊藤和博です。
今回は、AfterEffects CC 2019のエクスプレッションから、「スネークケースとキャメルケース」をご紹介します。
このスネークケースとキャメルケースは、プロパティやメソッドの「書き方の違い」になりますが、AfterEffects CC 2019で新しく搭載されたJavaScriptエンジンでは、一部のプロパティやメソッドで許容されていたスネークケースでの書き方がサポートされなくなり、キャメルケースを使うよう仕様が変更となりました。
書き方を変えることによって結果的に文字入力の数も減るため、コーディングする側にとっては楽にはなりますが、書き慣れた方にとっては少々面倒かもしれません。
仕様変更を理解しておかないと、都度コンポジションパネルにエラーのバナーが表示されるため、このバージョンから書き方を変える必要がある、ということについては理解しておく必要があるかと思いますので、そのあたりをご紹介します。
AfterEffectsのエクスプレッション言語メニューでは、もともと(CSの時代から)スネークケースを呼び出す仕様にはなっておらず、最初からキャメルケースで呼び出せるため、わざわざスネークケースでエクスプレッションを手書きするか、他の人が書いたソースを見なければ、目に触れることも無いかもしれません。
また、「どのようなプロパティやメソッドでも、キャメルケースで書かれているものは、大文字を小文字に変更し、変更した小文字の前にアンダーバーを追加することでスネークケースで書き換えることができるか?」というとそうではありません。
例えば、timeToTimecode()メソッド(ストリング扱い)や、timeToFrames()メソッド(ナンバー扱い)などを、time_to_timecode()や、time_to_frames()と記述してもReference Error(参照エラー)となるため、あくまでもスネークケースで書くことができるプロパティやメソッドのみ、ということになります。
ちなみに、以前のブログ【イトウ先生のTips note【After Effects CC 2019】トレイル(オニオンスキン)】でご紹介しました、valueAtTime()メソッドをスネークケースで書き直すと以下のようなアラートを返します。
TypeError:・thisComp.layer(・・・),position.value_at_time is not a function.
この場合は、「Reference Error」ではなく「TypeError」で「書き方のエラー」という表示がでてきます。ただし、エラーは表示されるものの、コンポジションで通常通りプレビューも可能で、レンダリングも可能です。これは、互換はあるけれども、サポートはされない、ということになりますので、スネークケースを使ったままレンダリングし、何らかの不具合が発生してもサポートされない、という解釈になるかと思います。
ちなみに、CC2018では、スネークケースで書いても以下のようにエラーは返しません。
AfterEffects CC 2019からサポートされなくなったスネークケースのプロパティは、以下の32個になります。
this_comp
this_layer
this_property
color_depth
has_parent
in_point
out_point
start_time
has_video
has_audio
audio_active
|
anchor_point
audio_levels
time_remap
casts_shadows
light_transmission
accepts_shadows
accepts_lights
frame_duration
shutter_angle
shutter_phase
num_layers
|
pixel_aspect
point_of_interest
depth_of_field
focus_distance
blur_level
cone_angle
cone_feather
shadow_darkness
shadow_diffusion
active_camera
|
サポートされなくなったメソッドは、以下の28個になります。
value_at_time()
velocity_at_time()
speed_at_time()
nearest_key()
posterize_time()
look_at()
seed_random()
gauss_random()
ease_in()
ease_out()
|
rgb_to_hsl()
hsl_to_rgb()
degrees_to_radians()
radians_to_degrees()
from_comp_to_surface()
to_comp_vec()
from_comp_vec()
to_world_vec()
from_world_vec()
to_comp()
|
from_comp()
to_world()
from_world()
temporal_wiggle()
loop_in_duration()
loop_out_duration()
loop_in()
loop_out()
|
ちなみに、スネークケースで書いたまま保存し、再び開くとキャメルケースに自動で書き直されているか?、また、以前のバージョンのAfterEffectsでスネークケースで書いたものを、CC2019で開いて更新すると、キャメルケースに書き直されて更新されるか?というと、そういった互換性はなく、スネークケースのままで開きます。ただし、動作の互換があるため、タイプエラーになるものの、動くことは動きます、という解釈になるかと思います。
CC2018以前のAfterEffectsでこれらを使用されていた場合は、キャメルケースに書き換えることで「エラーなく」使用でき、言語メニューからも従来通りキャメルケースで呼び出し可能ですので、CC2019からこういった変更点も新たに加わった、ということは頭の片隅にでも覚えておくといいかと思います。