執筆バージョン: Unreal Engine 5.4
|
こんにちは。UEFNで用いられているプログラミング言語「Verse」はいくつか面白い特徴のある言語です。今回はそのうち1つをご紹介します。
公式のリファレンスでは最初のページでVerseの特徴やコンセプトが説明されており、その中の1行にこう書かれています。
「・文と式の区別がない。Verseではすべてが式であるため、すべてで結果が得られます。」
この一文はVerseが非常に興味深い特性を備えていることを示しています。
Verse式三項演算子
プログラミングでは三項演算子という概念があります。例えば、C++などではこのように書きます。
|
const bool a = true; const int x = a ? 1 : 0; |
これは「aが真であれば1で、偽であれば0でxを初期化する」という意味になります。
さて、Verseでは三項演算子は現在サポートされていません。必要ないと言ったほうが正しいかもしれないです。
同じ処理をしたい時にはVerseではifを使用しこのように書けます。

C++においてifは「文」です。条件分岐によるフローの制御のみを行います。
しかし、Verseでは「文」であり、かつ「式」なのでフロー制御に使える以外にifそのものから結果が返るという特徴があります。条件によって結果は変化させられるため、結果的に三項演算子と同じ動作をします。

多少書く量は増えるものの、これは三項演算子の問題点の1つである「記号や優先順位がややこしくて分かりにくい」という問題を解決するスマートな方法だと思います。
さらにcase文(式)でも同じように書くことができます。

こちらも特殊な記法などを用いず、普通のcaseと同じ感覚で記述することができるのが嬉しいところです。
forで結果として返ってくるのは配列
for文(式)の場合、今度は配列が結果として出力されます。

これはfor内に条件式を書き加えることで、結果として追加するものと追加しないものを選択することができます。

また、多重配列の作成や操作の際も使用する変数を減らすことができます。

これらの特性を理解していると繰り返し処理がとても簡潔に書けます。以下はライフゲームの世代交代処理のコア部分を記述したものです。

タイムフロー制御も結果を返す
Verseの大きな魅力の1つとして、非同期処理での自由度と可読性の高いタイムフロー制御が挙げられます。これらのタイムフローももちろん「式」であり結果を返します。
raceやrushは最初に終了した処理の結果を返すため、どの処理で終わったのかなどを変数を使用しないでも知ることができます。

またsyncについては複数の結果をタプルにまとめて返します。こちらも処理の結果を知るなどさまざまな活用の仕方がありそうです。

こういった機能について他のプログラミング言語でも同じようなものはありますが、Verseほど平易に書ける言語は珍しいように感じます。
Verseは機能面だけで見てもブループリントやC++ともまた少し味わいの違う言語になっています。学んでみると面白いですよ。