🎃

Verse言語の設計思想を読み解きたい(8)失敗コンテキスト:⑥オプション型の初期化式

2023/04/10に公開

前回はこちら
https://zenn.dev/t_tutiya/articles/60a066170964f1

失敗コンテキスト編のラストはオプション式です。まずオプション型を説明してから、その中の失敗コンテキストについて見ていきます。

オプション型

https://dev.epicgames.com/documentation/ja-jp/uefn/option-in-verse

オプション型(option type)」は「複合型(Container Types)」の一つです。verseでは、配列やクラスなど、複数の型の振る舞いをする要素を複合型と呼びます。

オプション型は、通常の型に値を持たない状態を含める事が出来ます。Verseの通常の型は、C#で言うnullが許されません。オプション型を使えば、値を持たない型を使用できます。

オプション型の初期化/再代入

定数/変数の定義時、型名の前に"?"を付与するとオプション型になります。
オプション型の初期化は以下のようになります。

#定数定義
MaybeANumber1 : ?int = false 
MaybeANumber2 : ?int = option{42} 

#変数定義
var MaybeANumber3 : ?int = false 
var MaybeANumber4 : ?int = option{42} 

オプション型の初期値には、falseあるいはoption式を使用します。
falseの場合、その定数/変数は値を持ちません。C#で言うnullが代入されたような状態です。
option式の場合、その定数/変数は"{}"で囲まれた式が返す値が設定されます。

オプション型の変数は値を再代入できます。設定出来る値は初期化の時と同じです[1]

#変数再代入
set MaybeANumber4 = false 
set MaybeANumber3 = option{42} 

オプション型へのアクセス

オプション型を参照する場合は、下記のようにクエリ演算子を付与しなけれいけません。(付与しなければコンパイルエラーになります)。

#オプション型へのアクセス
if (Number := MaybeANumber3?):
    Number

クエリ演算子を付与した式は失敗許容式になります。これはつまり、オプション型へのアクセスは失敗コンテキスト内でしか出来ないという事です。

失敗コンテキスト:⑥オプション型の初期化式

option式の"{"~"}"の中に記述される式は失敗コンテキストです。この式の事を便宜上オプション型の「初期化式」と呼ぶことにします[2]

初期化式が失敗した場合、option式はlogic型falseを返します。初期化式が失敗しても、option式自体が失敗するわけではない点に注意して下さい(option式自体は失敗許容式ではありません)。

ちなみに、何故option式がブレス括弧を伴うのかというと、恐らくクラスの初期化と記法を揃えようとしているのだと思われます[3]。Verseには「異なる機能でも、同じ振る舞いが期待される場合は同じ文法を採用する」という設計思想があるようで、これもその1つです。

続き

https://zenn.dev/t_tutiya/articles/e4139b9f2dc13d

お知らせ

verse言語とUEFNの記事を他にも書いているので御覧下さい。
https://zenn.dev/t_tutiya

最後まで読んで頂きありがとうございました。この記事がお役に立てたようであれば、是非LIKEとフォローをお願いします(今後の執筆のモチベーションに繋がります)。

#Verse #UEFN #Fortnite #Verselang #UnrealEngine

宣伝

「Unityシェーダープログラミングの教科書」シリーズ1~5をBOOTHで頒布中です。
https://s-games.booth.pm/

脚注
  1. 公式ドキュメントのオプションのページでは、オプション型の再代入に":="演算子を使用していますがこれは誤記です ↩︎

  2. このブログの造語です ↩︎

  3. 土屋の想像です ↩︎

Discussion