Laravel・PHP入門

PHPer初心者

【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やっぱり楽させてくれる…

初心者で文系で、アルゴリズム系ぶっ飛ばした方はこういう風にアルゴリズム系を
楽しく復習したら良いと思います。楽しいです。

以上