オートローダー・DI・計算量
引き続きPHPでMVCモデルを作る学習を進めているが、オートローダーとDIに関しては理解に時間がかかった。
オートローダー
名前空間とディレクトリ構造について再認識する良い機会になった。名前空間についてはある程度理解していたつもりだったが、このおかげで理解がさらに1歩進んだ。またLaravelの学習を進めている中で一度だけautoloadに追記したことがあったが、その時の意味を理解することができた。自分で使いこなすレベルになるためにはまだ経験が足りないと思うので、その時のために頭に入れておく。Laravelのデフォルトのautolodaにはapp/しか記述がなかったが、その意味も理解した。OK。自分が今まで名前空間とディレクトリ構造を一致させるように書き込んでいたからだった。
DI
これちょいちょい調べていたが、やっぱりまだ個人的に納得のいくレベルまでは理解できていない。ただQiitaでDice機能を例にした記事
を改めてみたところ、以前より理解することができ、それがかなり役に立った。
前提としてDIはオアターンの1つであり、それを実現するフレームワークがDIコンテナ、Laravelではサービスコンテナである。
- Controllerの中に全部書く
- クラス化して mt_randの機能を切り離し、Controllerでインスタンス化する
- インスタンス化をControllerの外で行う(タイプヒントされた引数をfunctionに渡す)=DI
またインジェクションには
- メソッドインジェクション
- セッターインジェクション
- コンストラクタインジェクション
の3種類存在することがわかった。ただこの3つの使い分けについてはまだ理解していない。Laravelのスキームに組み込まれたクラスは大体コンストラクタでインジェクションできるらしい。
DIのメリット qiita.com
はController側でインスタンス化しなくて済むので、修正の手間が少なく(呼び出し元を変えるだけでOKになることがる)テスト時にも便利で、DIコンテナのメリットはControllerの引数が少なくて済む
正直メリットをまだ実感することはできていないので、これから先の学習でその部分を補っていく。
計算量
エンジニア界隈のTwitterで流行りの100日漫画がある。そこで計算量について聞かれているシーンが話題になったので、改めて復習してみた。以下はステップ数表記で、計算量はO(n)のように記す
- n
- n2
- log n
- √n
それとステップ数の計算についても理解することができた。とてもわかりやすいQiitaの記事様様 qiita.com
である。
確認としてnは反復
n2は反復2重またi<n*nが終了条件にある時
log nは実行するたびにiが累乗されてって問題のサイズが定数分の1になる時(例えば2の累乗だったら問題のサイズはどんどん1/2、半分になってく)
√nはi*i<nが終了条件にある時