見出し画像

Godot 4.2 のUntyped Declaration試してみた

Godot 4.2で追加された機能、Untyped Declarationのワーニングを試してみました。変数に型書いてないと、叱ってくれる機能です。意外に今までなかったんですね。

プロジェクト設定>「一般」タブ>デバッグ>GDScriptの中に設定項目があります。"Untyped Declaration"をWarnに設定します。すると、型が無い変数や戻り値の無い関数があったときに、UNTYPED_DECLARATIONワーニングが出ます。よさげな設定だ!

4.2でプロジェクト設定に項目が追加されました

今作ってるゲームのプロジェクトで試しに設定してみると、大量にワーニング出てきました。これはその記録です。

戻り値の無い関数

Function "abandon()" has no static return type.

関数の戻り値(だいたいvoid)が書いてないと、このメッセージが出ます。これがワーニングの内訳の8~9割くらいを占めました。

func abandon():
↓
func abandon() -> void:

Dictionaryのkeys()とvalues()

"for" iterator variable "key" has no static type.

Dictionryをkeys()で走査するところで、このメッセージが出ました。4.2からはfor文のinの前に型を書けるようになったので、これで型を具体的に指定してあげると、ワーニングが消えます。ただし、代わりにアンセーフラインになります。Dictionaryに型指定できないから仕方ないね・・・。

for key: in _items.keys():
↓
for key: StringName in _items.keys():

keys()ではなく、values()で走査している場合にも出ます。

for val in _files.values():
↓
for val: StockFile in _files.values():


ローカル変数の型書き忘れ

Variable "ratio_min" has no static type.

ローカル変数の、floatとかintの付け忘れで出るメッセージです。意外に見落としある。

var ratio_min = 1.01var ratio_min: float = 1.01


enumのvalues()

"for" iterator variable "product_type" has no static type.

enumをvalues()で走査しているところにこのメッセージが出ます。Dictionaryのときと同様に、inの前に型を書いてあげると消えます。

for product_type in Product.Type.values():
↓
for product_type: Product.Type in Product.Type.values():

なんでも受け取る引き数

"dat" has no static type.

引き数に型が付いてない関数があると出るメッセージです。正体不明の変数を渡せば型名を返してくれる関数を、デバッグ用に作ってたんですけど、これで出ました。この場合、型としてVariantを付ければメッセージが出なくなりました。Variantは、intもArrayもVector3もObjectも含めたすべての「祖」みたいな存在みたいです。

static func get_type_name(dat) -> String:
↓
static func get_type_name(dat: Variant) -> String:

以上です~~


この記事が気に入ったらサポートをしてみませんか?