😽

[UEFN][verse]小ネタ:「mapへの代入」が失敗許容式になる件

2023/07/02に公開

※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

脚注
  1. 土屋の認識ミスだったらごめんなさい。 ↩︎

Discussion