🐥

RustとWebAssemblyによるゲーム開発 ch.3

2024/06/25に公開

RustとWebAssemblyによるゲーム開発
の3章を読んだので気になった点をまとめます

3章では、実際にゲームループを実装しました
その際コードのまとめ方として階層アーキテクチャに則りました
コード沢山書いて楽しかったですが、あまり疑問に思うところがなかったのが残念

rustやwasmやブラウザやゲーム開発に詳しい(くなくても)みなさま〜
まさかり〜(くれ)

復習

ok()ok_or_else()

Result → Optionok() Option → Resultok_or_else()
ok()は有用なエラー情報が捨てられる = エラー処理面倒な時に便利
ok_or_else()はエラーメッセージ沢山書く必要がある = 有用なエラー情報を使える

気づいた事

階層アーキテクチャのめっちゃ基本

階層アーキテクチャの説明でよくapiを多重に分けて実装して、各層が一個下のレイヤーにのみ依存させることでリサイクルしやすい構造になる、みたいなのを見るんですが、あんまりこの説明にピンときていませんでした
これって要は、

例えば、この本の3章ではbrowser engine gameの3層に分けて実装した
それぞれのレイヤーは本来、異なる人たちが実装していると考える

  • browserを実装する人たちはブラウザapiの便利なラッパーやら痒いとこに手が届くようなapiを提供してくれる
  • engineを実装する人たちはbrowserモジュールが提供する便利な機能を利用して、ゲームを作る際に必要なapiを作る
  • gameを実装する人たちは、実際に自分たちが作るゲールの実装をする
    これらの実装を一人でというか、最も高いレイヤーであるゲームを作ると言う目的のためにbrowser engine gameを実装してゆくのがレイヤーアーキテクチャ

ってことですよね?

これの嬉しい点を考えてみました パッと思いつくのは
依存関係がわかりやすいから変更を加える際に楽できる
そして、この考え方に階層アーキテクチャと名前をつける事で、実装の方針を共有することが楽になる

この本のような小さいプログラムならまだしも、これがもっと大規模に、そして複数人で実装、ってなってくると旨みが増してきそうですね

あと、階層アーキテクチャの説明でこんなことが書かれていました

コードを、モジュールや関数や構造体などの名前を持った言語機能に注捨することで、記憶しておかなければならない情報の量を減らすことができる。このおかげで、正しく設計されたシステムは、楽にプログラムできる。一方で、抽象化しすぎると、プログラムの詳細を全て覚える代わりに、抽象化したものを全て記憶することになる。ちょうどいい抽象化を心がけよう。

本当にその通り 3章で一番大事な部分だなと思いました

Discussion