Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

現在コード内で main と呼ばれているものに適切な命名をする #167

Open
sozysozbot opened this issue Dec 4, 2021 · 3 comments
Assignees
Labels
dev-enhancement documentation Improvements or additions to documentation help wanted Extra attention is needed

Comments

@sozysozbot
Copy link
Contributor

問題意識

現在、コード内に main という名前の物体がいくつかある。その中の一つに、以下に説明する名前なき概念を表すために便宜上用いられている main がある。

文脈解説

cerke_online のフロントエンドがやることというのは、以下の二種類しかない。

  • 自分側のユーザーの決断をサーバーに送り、それゆえ発生した事象を描画する
  • 相手側のユーザーの決断がされたかをサーバーに問い、決断が発生していたなら、それゆえ発生した事象を描画する

(実は、バックエンドの POST 先 URL はこの「決断か?それとも poll か?」を元に再編成すれば明らかにきれいになる。したがって、この issue 解決前に勝手に解決しておくこととする。)

さて、机戦において、ユーザーが成す決断には何種類かある。それは以下の通りである。

  • ①: 役が完成した際に、【再行】(ty mok1) とするか【終季】(ta xot1) とするかという決断
  • ②: 踏越え判定の結果がサーバーから返ってきた後に、その結果を基に最終的な行き場所を決めるという決断
  • ③: それ以外全て。具体的には、「皇を動かす」「持ち駒から駒を打つ」「踏越えしないように駒を動かす」「踏越え後に有限移動しかしないように駒を動かす」「駒を踏んでそこから無限移動をしてやるぞという決断をする」の 5 つ。

② には AfterHalfAcceptance という名前があり、③ の「皇を動かす」「持ち駒から駒を打つ」「踏越えしないように駒を動かす」「踏越え後に有限移動しかしないように駒を動かす」には NormalMove という名前があり、③ の 「駒を踏んでそこから無限移動をしてやるぞという決断をする」には InfAfterStep という名前がある。これらの名前を私はどれも気に入っていないが、それはそれとしてこれらの名前は一貫して用いられている(ただし、関数名に NormalMove の意味で normalMessage となっているやつがあった。是正する)。

一方で、一貫していないのが main だったり空文字列だったりで命名されているやつである。こいつらはヤバいし非常にマズい(語彙力)。

具体例

「②または③」が main だったり空文字列だったりで命名されている例

  • /slow: ② または ③ が送りつけられる POST 先 URL 。

    この /slow という名前は、もともとローカルでテストしていた際に、ネットワークを超えることによる遅延を再現するためにバックエンド側で await new Promise(r => setTimeout(r, time)); を入れるということをしていたときの名残である。じゃあ名前を直せよ

  • つまり、名前がないので、「slow な空文字列だから URL は /slow」となったのである。
  • フロントエンドの sendStuff(): ② または ③ を /slow に送る関数。ちなみに、これ以外のやつは await sendStuffTo<{}, RetTaXot>("whethertymok/taxot", ... みたいに URL を指定して送る。こいつも要は send{ここに名前を入れたいが、いい名前が思いつかなかったので空文字列}Stuff ということ。
  • バックエンドの main(): /slow に送られてきた ② または ③ の JSON 構造を検査し、処理する関数。
  • バックエンドの analyzeValidMessageAndUpdate(): /slow に送られてきた ② または ③ を処理する関数。この ValidMessage といいうのは、これまた Valid{ここに名前を入れたいが、いい名前が思いつかなかったので空文字列}Message という意味である。

「③」が main だったり空文字列だったりで命名されている例

  • /mainpoll: 相手が ③ の決断をしたかどうかを問うための POST 先 URL 。
  • フロントエンドの MAIN_POLLING_ALLOWED, forbidMainPolling(), isMainPollingAllowed(), allowMainPolling(): 上記問いかけをしてよいかを判断・制御するやつ。
  • バックエンドの replyToMainPoll: /mainpoll に来たやつに返事をする

今後の展望

  • 「決断か?それとも poll か?」を元に、バックエンドの POST 先 URL を再編成する
  • その際、/slow の責務から ② の処理を引き剥がし、命名せねばならない対象を ③ のみとする
  • なんかいい感じの名前を ③ に対して付与し(main とかいう一般的すぎる単語が用いられていることが問題なので、パイグ語・リパライン語で命名するのも可とする。それはそれとして用語集は整備が要るんだよな)、それで全てを統一する
@sozysozbot sozysozbot added documentation Improvements or additions to documentation help wanted Extra attention is needed dev-enhancement labels Dec 4, 2021
@sozysozbot
Copy link
Contributor Author

決断か?それとも poll か?」を元に、バックエンドの POST 先 URL を再編成する
その際、/slow の責務から ② の処理を引き剥がし、命名せねばならない対象を ③ のみとする

以上は 23de20e で解決。

@sozysozbot
Copy link
Contributor Author

image

この「A」と「C」にも名前付けたいよなぁ。「A」が受け取れるやつの総称が暫定 main なんだけど

@sozysozbot
Copy link
Contributor Author

物理にヒントを得て GroundState, ExcitedState という命名にすることも一瞬考えたが、そんな命名をすると闇鍋まっしぐらなので却下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dev-enhancement documentation Improvements or additions to documentation help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants