0
2

More than 3 years have passed since last update.

【Laravel】Collectionを使おうぜって話だよね

Posted at

今回はコレクションの利用を促進するのが目的の記事。
と言っても自分も理解が浅いのでぜひともつよつよからの
ご助言も頂けたらうれしいです。

Collectionとは?

Illuminate\Support\Collectionクラスは
配列データを操作するための、書きやすく使いやすいラッパーです。
参照:https://readouble.com/laravel/8.x/ja/collections.html

配列データを書きやすく使いやすくとありますね
でもそもそも配列に対しても色んな関数があるし
今はコレクションなんて使わなくてもコード書けているから必要ないかな
なんて自分は考えていました、はい、、。

それではなんでコレクションを使ったほうがいいのか、
また、配列と何が違うのかを纏めていきます。

Collectionと配列の大きな違い

これは実務で自分もなるほど、たしかにな!と感じたことなのですが
通常の配列ってエラーが出やすいですよね???
なんのことかって

$user = [
    'name' => 'daikin', 
    'age'  => 31
];

上記のような情報があったときに

$user = [
    'name' => 'daikin', 
    'age'  => 31
];
 {{ $user['name'] }} // daikin

daikinが返ってくる
だけどもしnameがなかったらどうなるかと言うと

$user = [
    'age'  => 31
];
{{ $user['name'] }} // Undefined array key "name"

といった感じにエラーが返ってくる
今回は簡単なコードなのですが
案件によっては複雑な処理で求めたKeyが
取得出来てなかったりすることもあったりなかったり。
これがコレクションだとどうなるでしょう

$user = collect([
    'name' => 'daikin', 
    'age'  => 31
]);
{{ $user->get('name') }} // daikin

上記はコレクションになっているのでgetを使ってます。
ここまでは普通の配列と変わらないですね。
ではnameをなくしてみましょう。

$user = [ 
    'age'  => 31
];
{{ $user->('name') }} // null

なんとnullが返ってきてるじゃないですか!
だからなんだよという声も聞こえてきそう、、僕がそうだったんですよね。
なにが変わるかと言うと
Keyが無いときの処理を考えなくてよくなります!
全く考えないこともないですがなにをしたいかというと
下記のときには条件をつけてエラー画面を出さないようにしないといけないです。

$user = [
    'age'  => 31
];
@if (isset($user['name']))
    {{ $user['name']}} // nameはないのでこの処理は通らない
@endif

はいはいとなりますね。
これがコレクションだと、、、気づきましたか?
下記のような実装になりますよね。

$user = [ 
    'age'  => 31
];
{{ $user->('name') }} // nullなのでエラーも出なければ何も出力されない

そうなんですよ!
表示しないという処理が許容されるのであれば
コレクションだと変に条件を書かなくてよくなります!
Bladeに条件を書きなぐるのって悪いことではないけど
テストが手間になるのもあるし
その前の処理で変更があるとBladeにも修正を加えないといけなくなりますよね。
それがコレクションをうまく使うことで全体的にも整ったコードになるので
運用もしやすくなるんじゃないのって話だよね←言いたいだけ

僕はまだまだ未熟なのでもっともっとメリットがあるはずなので
これをきっかけにぜひともコレクションについて深堀りしてみてください

最後まで読んでいただきありがとうございます!
閉じる前にLGTMだけクリックお願いしますm(__)m

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2