天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

yr-learning Vol67に参加してきた

yr-learning Vol67 - connpass

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

BuilderパターンでGameStatusをBuildしてみる

Builderパターンを使って、GameStatusをBuildしてみるようにしました。
Typescriptで書いていましたが、どちらかというとOOPチックに書いてみて、こんなものかなというのを途中途中で議論しながら作りました。

そもそも今のタイミングでBuilderパターンを書く必要があるのかという話や、Builderパターンの中でWithXXXX()のメソッドを呼び出していくにあたって状態が変わってオブジェクトの中身が不正な状態(実際のGameではあり得ない先攻と後攻が違うみたいな状況が起きる的な状態)が起きるようなことはないようにした方がいいのか否か?という話をしました。

その後、今回は関数型プログラミングに取り組んでいるということもあり、それなら関数型っぽく書いてみるとどんな感じになりそうか?という話をして、関数型っぽくコードを書いてみました。
生成AIを使いながら書いてみたのですが、最初は???なコードが生成され、それを一行一行紐解いていった結果、たしかに状態を持たない形になっており、高階関数などを使えばかなり簡潔に記述ができるという点もすごいねという話をしました。

一方で、自分たちで一から書けるのかというとそんなことはないので、本当に関数型っぽく書くのであればこのあたりは今後学んでいきたいという話をしました。

次回以降の予定決め

上記の話も踏まえて、次回以降は関数型言語をより本格的に学ぼうという話になりました。
今はTypescriptを使っていますが、これだと関数型言語っぽく書いてみるものの実際それが関数型プログラミングになっているのかは誰もわからない、という状態になってしまうため、それであれば関数型プログラミングしかできない言語を選定してそれでTDDをやっていこうという話をしました。

環境構築のしやすさや言語を書くモチベーション、プログラミング言語の柔らかさなどをはじめとした観点で色々と議論をした結果、純粋関数型であるHaskellを使おうという話で落ち着きました。