🤖
【UEFN/Verse】オブジェクト指向型や関数型風にVerseを書いてみる
何となく
マルチパラダイム。可能な限り 決定論的 になるようにするなど、関数型プログラミング、オブジェクト指向プログラミング、および 命令型プログラミング の長所を活かします。その例としては、データがデフォルトで 不変 となっており、コードとデータが同じであれば、結果は常にまったく同じになるといったことが挙げられます。
これまでずっとUnity/C#しか使ってこなかったため関数型プログラミングに触れる機会がありませんでした。そこでどのようなものか知りたいということで関数型プログラミングについて調べ始めました。
関数型プログラミングとは
ざっくりと
- クラスを使わない
- 状態とふるまいを切り離す
- 入力と出力を意識する?(基本的に何かがreturnされる関数が多い)
Haskellを学べばより深みに行けるらしい、、、
とりあえず書いてみる
オブジェクト指向型
クラス内部にふるまいを書く
#sample.verse
sample := class():
var SamleValue : int = 0
IncrementValue():void=
set SamleValue += 1
#sample_controller.verse
sammple_controller := class():
SampleClass : sample = sample{}
Init()<suspends>:void=
loop:
Sleep(1.0)
SampleClass.IncrementValue()
関数型
クラスの外にふるまいをかく
(まちがってるかも)
#sample.verse
sample := class():
var SampleValue<public> : int = 0
#sample_behavior.verse
(InSampleClasss : sample).IncrementValue<public>():void=
set InSampleClasss.SampleValue += 1
#sample_controller.verse
sammple_controller := class():
SampleClass : sample = sample{}
Init()<suspends>:void=
loop:
Sleep(1.0)
SampleClass.IncrementValue()
まとめ
関数型でうまいこと抽象化することができれば一つのファイルに書き込むコード量が減ってきそうだと感じました!クラスを使わない言語ってちょこちょこ最近見かけるので今後もその書き方や良さについて理解していきたい。
Discussion