as キーワード概要
Godot(GDScript) における as は、型キャスト(Type Casting) を行うためのキーワードです。
指定したオブジェクトが特定の型(クラス)に変換可能かをチェックし、
成功すればその型のオブジェクトとして扱えるようにします。(変換できない場合は null を返す)
主に、ノードやリソースを安全にキャストしたいときに、以下のように使用します。
var node = get_node("<適当なノードのバス>")
var sprite = node as Sprite2D # node を Sprite2D 型としてキャストしようと試みる。
# キャストに成功すれば sprite にそのSprite2Dオブジェクトが入り、失敗すればnullとなるため、nullチェック
if sprite != null:
sprite.texture = preload("res://icon.png") # キャスト成功時はSprite2Dの専用プロパティへアクセスが可能
キャストによって型を確定させることで、安全な取り扱いのほか、GDScriptエディタ記述時に補完が有効になったり、
キャスト自体の成否(nullチェック)によって型を判別するような挙動も可能になります。
is 演算子との違い
型の確認という点で、よく似た挙動を取る is 演算子 との違いについてもおさえておきましょう。
is は、型の判定を行う演算子で、以下のように使用します。
指定オブジェクトの型が指定した型、もしくはその派生型であればTrue、そうでなければFalseとなります。
# 例:変数obj の型がSprite2D (もしくはその派生型)であれば、テクスチャのロードを実行する
if obj is Sprite2D:
obj.texture = preload("res://icon.png")
as キーワードとの違いは、「型のキャストを行うか、型の判定のみか」という点で、
まとめると、以下のようになります。
要素 | 型の明示 | 型のチェック |
---|---|---|
as キーワード | ◎ コード上で型が確定し、補完も使用可 | △ 検証としてはnullチェックが必要 |
is 演算子 | × 判定のみで、型の明示はしていない | ◎ True/Falseで簡潔に判定可能 |
is 演算子による型の判定と、 as キーワードを組み合わせることで、以下のようにより安全に肩を明示的にキャストする使い方も可能です。
if obj is Label:
var label := obj as Label
label.text = "Hello"
as の活用例
最後に、as キーワードによる型キャストの活用例について、いくつかまとめておきます。
ノード取得後の型を確定させる
get_node()
は返り値が一般的に Node
型なので、具体的な型がわかっているなら as
でキャストして扱いやすくできます。
var label = $Label as Label
if label:
label.text = "Hello"
複数ノードをまとめてキャスト・処理
複数ノードの繰り返し処理の中で、キャストの成否によって特定の型のみを対象に操作も可能です。
for child in get_children():
var sprite = child as Sprite2D
if sprite: # 子ノードの中で Sprite2D
だけを対象に操作
sprite.modulate = Color(1, 0, 0) # 赤くする
型が不定のオブジェクト引数から、特定の種類のものだけ処理
以下のように、衝突したオブジェクトなど、不定のオブジェクト引数が、指定したクラスにキャストできた場合にのみ処理するような書き方も可能です。
func _on_area_entered(area):
var enemy = area as Enemy
if enemy:
enemy.stun()
まとめ
as
は指定したオブジェクトのデータ型へのキャストを試すためのキーワード。(is 演算子は型の判定のみ)- キャストに成功すればその型として安全に操作できる。
- 失敗してもエラーにはならず
null
になるので、null
チェックは必須。 - 主にノード取得後に肩を確定させたり、特定の型に変換可能なオブジェクトにアクセスしたいときに使う。
コメント