5-3. TypeCheckingによる堅牢性と補完

TypeCheckingによる堅牢性と補完

LuauのType Checkingは、変数や関数の引数、戻り値に特定の型を指定することを可能にします。これにより、型の不一致によるエラーをコンパイル時に検出し、防ぐことができます。
RobloxでのLuauのType Checking機能は、より安全で効率的な開発を実現するための重要なツールです。型の明示により、開発者はコードの意図をより簡単に伝え、共同作業者とのコミュニケーションを改善できます。

Type Checking 概要

LuauのType Checking機能は、変数や関数の引数、戻り値に特定の型を指定することを可能にします。これにより、型の不一致によるエラーをコンパイル時に検出し、防ぐことができ、より堅牢で信頼性の高いコードの作成をサポートします。また型が定まることで以下のような利点があります。
  • エラーの早期発見: 型のミスマッチや想定外の型の使用をコードの書き込み時点で警告します。
  • コードの明瞭化: Type Annotationにより、関数や変数の用途がより明確になり、コードの読みやすさが向上します。
  • 自動補完とヒント: 開発環境は型情報を利用して、適切なコードの自動補完やヒントを提供します。
  • デバッグの容易化: 型エラーによるバグの可能性が減少し、デバッグが容易になります。

Type Annotation(型注釈)

Type CheckingのためのLuaの拡張として、Type Annotation(型注釈)ができるようになっています。基本的には型注釈を入れることで上述したTypeCheckingの利点が活かせることになりますので、積極的に型注釈をいれて、堅牢かつ効率的なコーディングを行いましょう。
型注釈の使用例が以下です。

使用例

この関数では、引数がRobloxの定義クラスであるであることが明示されており、関数内の変数もHumanoid型と明示されています。これにより、コーディングでは各クラスのAPIの補完や、ドキュメント参照が可能となります。また、それらに間違った型の変数を代入などした場合分析エラーが表示されるようになります。

型が定まるAPIの利用

型注釈を明示せずとも、型が定めまるAPIを利用する場合、その型情報を使うことができます。例えば上の例のは、以下の関数を使ったHumanoid取得に代替することで、Humanoidオブジェクトを取得することが明示的になり型注釈なしでも型と定まっています。

Humanoid型が定まる例

 

Type定義

Typeは以下のように独自タイプを宣言することが可能です。
また、により型推論を利用した型定義も可能です。

Type定義のエクスポート

キーワードでそのScriptの外でも参照可能となります。以下はCat型を定義しexportして利用しています。
また、オブジェクト指向のコードベースを制作する場合、ModuleScriptの独自クラス型を外でも参照できると便利な場合が出てきます(クラスのプロパティやメソッドに補完アクセスできる等)。その場合、上述したtypeofを使ったメタテーブル含めた型推論のエクスポートが有効です。
Carクラスのタイプ情報を以下のように利用できます。

参照すべき情報