条件分岐の順番にも気を使おう

条件分岐の順番にも気を使おう

  • こういった条件分岐を見るとモヤモヤします
if ($foo->exists()) {
    // DBにレコードがなければFALSE
    return false;
} elseif (isset($parameter['bar'])) {
    // パラメータにbarが含まれなかった場合はFALSEを返す
    return false;
} else {
    return true;
}

何がマズかったのか?

  • DBにクエリを発行する処理とissetで値検証するだけの処理では前者の方が高コストです
  • コストが低い処理から順に条件を判定していくべきです
  • 前提条件としてコストが高い処理が含まれる場合に無理に行う必要は当然ありません

コストが高いものとはどういうものか?

  • DBへのクエリ発行
  • curl等のネットワークリソースを必要とする処理
  • ファイルアクセスが発生する処理
  • システムコールを伴う処理

伝えたいこと

  • 不要なネットワーク接続やシステムコールを伴う処理はコストが高いです
  • 一方でメモリにのったでーたの判定は非常に高速です
  • 不要なコストを発生させないために低コストなものから判定していく様にしましょう