エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

読みやすいプログラムを書くために。データの再利用vs再取得【641日目】

学んだこと

データをしぼりこむのではなく、永続化されたデータを絞り込んだ状態で再取得するのも手

データの再利用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の状態が重要であれば、クエリを再発行する方を選ぶ必要がある。

逆にデータが変わっているはずなのに変わってない・・・となる。

読みやすいプログラムって?

結局は、データの扱いの本質がどこにあるかが重要なので、一発でこれが正しいとは言えないφ(・

だけど、本質を正しく伝えるのが大切なので、後者の本質が正しいのに前者で書くのは、
バグも起こるかもしれないし、あとから読んだ人が『このプログラムがやりたいこと』を『勘違い』する可能性があります。

最後に。

『正しい意味』を『素早くわかりやすく理解する』のが本当の意味での『読みやすいプログラム』。

『ぱっと見キレイ』だけど『勘違いさせやすい』のは、読みやすいプログラムではないと思います。

読みやすいプログラムはなにかをもう一度自分で見直してみると、面白い発見があるかもしれません。
ということで、今回数日間連載していた『読みやすいプログラムを書くために』を締めくくりたいと思います。

ここまで読んでくださった方、ありがとうございました。