学んだこと
データをしぼりこむのではなく、永続化されたデータを絞り込んだ状態で再取得するのも手
データの再利用vs再取得
// 全てのusersを使う処理 $users = User::get(); $this->xxx_func($users); // 条件に合ったユーザーを、さっきのデータから絞り込み $type_beginner_users = $user->whereIn('user_type_id', UserType::BEGINNER); if (!$type_beginner_users->empty()) { $this->yyy_func($type_beginner_users); }
// 全てのusersを使う処理 $users = User::get(); $this->xxx_func($users); // 条件に合ったユーザーをクエリで再取得 $type_beginner_users = User::whereIn('user_type_id', UserType::BEGINNER)->get(); if (!$type_beginner_users->empty()) { $this->yyy_func($type_beginner_users); }
このように、データを再利用するものと、クエリで再取得するもの。2つの書き方も考えられる。
本質はどこか?
xxx_funcとyyy_funcは、本質は同じデータを取り扱いたい場合は、データの再利用のほうがいい。
xxx_funcを行っている間にデータが書き換わったら、バグが起こる可能性がある。
加えて、クエリを再発行するので、通信が発生して処理がより重くなる可能性もある。
xxx_funcでデータが変わっているが、その変わったあとの状態がほしい。
yyy_funcを起こした瞬間のDBの状態が重要であれば、クエリを再発行する方を選ぶ必要がある。
逆にデータが変わっているはずなのに変わってない・・・となる。
読みやすいプログラムって?
結局は、データの扱いの本質がどこにあるかが重要なので、一発でこれが正しいとは言えないφ(・・
だけど、本質を正しく伝えるのが大切なので、後者の本質が正しいのに前者で書くのは、
バグも起こるかもしれないし、あとから読んだ人が『このプログラムがやりたいこと』を『勘違い』する可能性があります。
最後に。
『正しい意味』を『素早くわかりやすく理解する』のが本当の意味での『読みやすいプログラム』。
『ぱっと見キレイ』だけど『勘違いさせやすい』のは、読みやすいプログラムではないと思います。
読みやすいプログラムはなにかをもう一度自分で見直してみると、面白い発見があるかもしれません。
ということで、今回数日間連載していた『読みやすいプログラムを書くために』を締めくくりたいと思います。
ここまで読んでくださった方、ありがとうございました。