【PHP】初心者がアルゴリズムの基礎勉強した時のメモ
フレームワークから入ってしまったので、
コーディングやプログラミングの基礎が足りない、と
先輩に課題をもらって再度学習をはじめました。
順番としては以下。
1. 今のディレクトリ以下のファイルを全て表示する(2時間)
2. ソート関数をPHPの組み込み関数を使用せず実装する(2時間)
3. カレンダーを表示する(月別、曜日は日〜土まで)(5時間)
4. デジタル時計を表示する(JavaScript)(5時間)
5. ◯✖️ゲーム(3 *3 )を実装する(3日間)
6. オセロゲームを実装する(5日間)
完全な実装は目指す必要がない、
第一に動くものであること、今回は学習目標であること。
実装あるやつだけ
3のカレンダー
gist.github.com
5.6の◯×とオセロゲーム(そういえばマイグレ用意し忘れた)
github.com
特に6番目のオセロゲームは、クラス設計などの勉強になりました。
何を1つのクラスとして持つか、どこが共通化できるかなどなど
そして人間はものすごく一瞬でいろんな判断をしているんだなーと感動しました。
せっかくなので忘れないよう自分で作ったのとFBメモしておきます。
・ゲームは前回などに影響しないため、Session保持
・エントリーポイントは全てコントローラ
・ひっくり返すかどうかなど判定系のロジックはServiceクラス
・実際に保持するデータに影響する箇所はRepositoryクラス
作り直すときはUseCaseとかで作り直してみたいですね。。。
いただいたFBとしては、
何をオブジェクトとして捉えるか、でかなり設計が変わってきますと
例えばオセロの場合は、オセロという一つのものがあったとして
その中にリセットするたびに変わる順番(これが何回めのゲームなのか)だったり、
コマをのせる盤だったり、コマ自体だったり。
それを考えるのがオブジェクト指向だねーと。
例えばどのコマをひっくり返すか判定するメソッドで、ひっくり返して次も判定、、と
同じ引数、同じ条件で繰り返す必要があるので
それらを切り分けてもよかった、
あとは共通クラス(右とか左とか)系は、完全に共通箇所が多いので
Interfaceとしてルール定義してあげた方が良いよね、
などでした。
ちょうど前回静的メソッド勉強したてだったので、
静的メソッド使いまくる病だったのですが
これが動的メソッド使いまくり→静的メソッド使いまくり→いい感じのバランス
に落ち着いていくらしいです。いつ落ち着くのやら…
にしても楽しかった〜
制限のあるプログラミングってすごく楽しい〜
Viewとの接続とか面倒だったのでLaravel使っちゃいましたがLaravelやっぱり楽させてくれる…
初心者で文系で、アルゴリズム系ぶっ飛ばした方はこういう風にアルゴリズム系を
楽しく復習したら良いと思います。楽しいです。
以上