Hikky所属のうめじです。
Vket Cloudでコンテンツ開発を始めて、1年になろうとしています。
その中で、個人的なコーディング規約をコツコツと書き溜めまてきました。
その内容が少しはお役に立つかもと思い公開します。
また、C# のコーディング規約を元にしているので、C#ユーザーは一読するだけでもC#との違いがイメージしやすくなると思います。
個人的ルールなので、適用する必要は全くありません。
また2025/3現在のHeliScript仕様にもとづいた記事となります。
基本設定
アクセス修飾子のprivate は省略する
HeliScriptはデフォルトがprivateのため
クラスのフィールドは、定数以外はpublicにしない
カプセル化の促進のため
グローバル変数とグローバル関数はなるべく使わない
HeliScriptではクラスの外で変数と関数の定義が可能です。
追跡が困難になるため、なるべく使わない
記法
メンバー変数 _fieldMember
は _付きのローワーキャメルケース
定数名 HogeName
はパスカルケースをつかう
readonlyな変数 _HogeName
は _付きのパスカルケースにします。
HeliScriptはreadonlyに非対応のため、命名規則として変更すべきでない変数を扱います。
Heliscriptでは型と同じ変数名で宣言できないため、_をプレフィックスします
HogeClass HogeClass; //コンパイルエラー
HogeClass _HogeClass //ok
グローバル変数はg_
をプレフィックスする
const変数 の場合はg_
付きのパスカルケース
可変変数はg_
付きのキャメルケース
グローバル関数の先頭の文字は小文字
にする
sdkが用意しているユーティティ関数も先頭は小文字になっています
例: hsSystemWriteLine()
delegate型の名前には、前にf
と後ろにCallback
をつける
コールバック関数 function Callback
由来です。
また、f
とCallback
の間にパラメーター名
を入れる
delegate void fJsValCallback(JsVal);
fJsValCallback callback;
命名
Item型の変数名はタイプをいれる xxItem
HeliscriptはItemという型で多くの種類を宣言できるため、変数名にタイプをつけると分かりやすくなります。
例: Field TypeのItemならfieldItem
、Object TypeならobjectItem
コンポーネントクラスの命名は_Component
をサフィックスする
HeliScriptは通常のClassの他にComponentの定義が可能です。
Classと同じように使用できるため、_Component
をサフィックスすることで判別がつきやすくなります。
component SomeGimmick_Component
{
public SomeGimmick_Component()
{
Wall = new Wall();
}
}
class Wall
{
}
引数付きでクラスを初期化したいときのメソッド名は Construct
HeliScriptではパラメーター付きのコンストラクタを定義できません。
そこで通常のメソッドで初期化用のデータを渡す必要があります
コーディングガイドライン
規約ほど厳密に管理していないものです
グローバルな関数や変数を記述するファイル名はキャメルケースにする
例:helApi.hs
アプリケーション層のクラスの命名
Canvasを使わないケース: 〇〇Gimmick_Component
Canvasを使うケース: 〇〇Presenter_Component
hsItemGetを使って取得したくなるようなItemはクラス化する
クラス化しないとアプリケーション層のクラスが肥大化しがちになります
UI操作も可能なEntityクラスとして位置付けると便利です。(ただし、通常のEntityと見分けるためにUIをプレフィックスします)
Canvasを使用するギミックは全てアクティビティにする
GUIを実装するときはアクティビティを活用すると便利です。
また、メインシーンとアクティビティとの疎通は文字列での指定になるため、アクティビティで完結させた方が結果的に工数が減る印象です。
hsItemGetよりhsItemGetOwnSceneを使う
hsItemGet はアクティビティからメインシーンのアイテムを取得するときにも使えます
hsItemGetOwnScene を使用することで同じVM(仮想マシン)のItemを取得している意図がわかりやすいです
疑似的なstaticメソッドとして、St-をプレフィックスする
現状HeliScriptでstatic記法は使えません。
自作のユーティリティ関数の実装コストが高くなってしまうため、クラス内に疑似的なstaticメソッドを置くことを許容します。
void StSystemAssert(bool condition, string errorMessage)
{
if (!hsSystemIsDebugMode()) return;
if (condition) return;
hsSystemWriteLine("Error: %s" % errorMessage);
}