定数
定数 は 値 が格納される場所であり、プログラムの ランタイム 中はその値を変更できません。
定数を作成するには、定数の 宣言 (識別子 と 型 の指定) と、定数の 初期化 (定数の値の指定) を行う必要があります。
定数は宣言時に初期化し、宣言してから使用する必要があります。
定数作成の 構文 は次のとおりです。
Identifier : type = expression

Identifier := expression

型が省略された場合、その定数の型は定数の初期化で使用された 式 から推測されます。型は定数の使用方法を示すものであるため、型を省略できるのは ローカル 定数のみです。モジュールの定数は、それを含むモジュールのインターフェースの一部を構成します。型がない場合、そのインターフェースは明白ではありません。
次の例では、ループ の各 イテレーション で乱数が生成され、定数 RandomNumber
を初期化するために使用されます。この乱数は、20 未満にならないとループを抜け出しません。
loop:
Limit := 20
# ローカル定数の場合、型は省略することができます。
RandomNumber : int = GetRandomNumber()
# 明示的に型を指定するとコードが読みやすくなります。
if (RandomNumber < Limit):
break
各ループのイテレーションでは、RandomNumber
という新しい定数が導入され、その値として GetRandomNumber()
の 結果 が割り当てられることに注意してください。
変数
上記の定数に加え、Verse には 変数 もあります。
変数は定数に似ていますが、キーワード var
を使用して定義されるため、どの時点でも値を変更できます。
その例を以下に示します。
var MaxHealthUpgrade : int = 10
これは 整数 の変数であり、その値は必ずしも 10
になるとは限りません。
変数作成の構文は次のとおりです。
var Identifier : type = expression

変数の型は明示的に指定する必要があることに注意してください。
変数を作成したら、次の構文で別の値を割り当てることができます。
set Identifier = expression

=
に加え、その他の各種演算子を使用して変数を 変更 できます。その例を以下に示します。
var X:int = 0
set X += 1
set X *= 2
グローバル変数
Verse の グローバル変数 は、(関数やクラスなどの内部ではない) モジュールのスコープで定義される変数です。現時点で、Verse のグローバル変数を宣言する唯一の方法は、weak_map(session, t)
型を使用することです。そのキーの型は現在のフォートナイトの島インスタンスつまり session
の型で、値の型は任意の型 t
です。weak_map
の詳細については、「マップ」を参照してください。
グローバル変数はモジュールのスコープで定義されるため、そのモジュールにアクセス権があるどのコードからもアクセスできます。
次の例では、ExampleFunction()
が呼び出されるたびにインクリメントされる GlobalInt
という整数のグローバル変数を作成する方法を示します。
using { /Verse.org/Simulation } # セッション用
var GlobalInt:weak_map(session, int) = map{}
ExampleFunction():void=
X := if (Y := GlobalInt[GetSession()]) then Y + 1 else 0
if:
set GlobalInt[GetSession()] = X
Print("{X}")
グローバル変数には以下の制限があります。
- ユーザーが現在いるセッションに対する値にのみアクセスできます。他のセッションの値にはアクセスできません。
- グローバル変数
weak_map
は完全な読み取りや書き込みができません。つまり、すべてのセッションに対する値の読み取りやオーバーライドはできません。 weak_map
には長さがないため、weak_map
の値を使用してイテレートしたり、現在アクティブなセッション数を確認したりすることはできません。