[UEFN][verse]小ネタ:「mapへの代入」が失敗許容式になる件
※7/2夕方あたりからツイッターでコメント/いいね/DMが出来なくなっています。連絡が取りづらかったり反応が遅れたりしたらすみません。←※23/7/3解消しました
小ネタです。mapへの代入について。
map
は、他の言語にも大体用意されているキーと値のペアを格納出来るコンテナ型変数です。
当然、コード内でmap
に値を設定したい時が多々あるわけですが、verseではmap
へのキー参照は失敗許容式のため、失敗コンテキスト内でしか記述できません。
公式ドキュメントでは以下の様なコードが使われています。
if(set MaybeWidget[Player] = Widget){}
ifの述語部は失敗コンテキストなので、map
へのキー参照が可能です。ただ、そのためだけにif
式を使うのは不格好だなと感じていました。
また、よく考えてみるとこの式は失敗しようがありません[1]。何故なら指定したキー(ここではPlayer
)と値のペアが既に存在するかどうかに関わらず、値(ここではWidget
)の設定は行われるからです。
if
式の場合、このコードが失敗する可能性(ここでは「else
節が実行され得る」くらいの意味)があるとも読めてしまい、コードの可読性に影響が出てしまいます。そこで他の式で代用できないかと試した所、以下はどちらも行けるっぽい事がわかりました。。
option{set MaybeWidget[Player] = Widget}
logic{set MaybeWidget[Player] = Widget}
どれも不格好ではあるのですが、if
式よりはoption
式かlogic
式の方が望ましいように思えます。一番無難なのはlogic
式かな?
正直、これはverseの言語仕様上のバグのような気がしています(とはいえ解決方法がある気もしない)。自分にとって分かりやすい記法を使いましょう。
最後まで読んで頂きありがとうございました。この記事がお役に立てたようであれば、是非LIKEとフォローをお願いします(今後の執筆のモチベーションに繋がります)。
#Verse #UEFN #Fortnite #Verselang #UnrealEngine
-
土屋の認識ミスだったらごめんなさい。 ↩︎
Discussion